【hdoj_1050】Moving Tables
来源:互联网 发布:linux从服务器往电脑 编辑:程序博客网 时间:2024/05/24 05:45
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1050
题意为:
为了叙述方便,把一个房间里面的桌子移动到另一个房间称为一个移动,给出若干个要求完成的移动,任意两个移动仅在移动路线不相交的情况下可以同时进行,求出移动所需花费的最小次数(时间).
注意:
出现有"对门"的路线,不能同时移动,例如,[2,4]和[3,5]不能同时进行,因为3和4对门.
路线重叠:
凡是路线重叠的两个移动,不能同时进行.路线重叠例如,[1,4]和[2,5]路线重叠,[2,4]和[3,5]路线重叠,[4,2]和[5,3]路线重叠.根据题意,可以看出,移动的顺序对于路线是否重叠没有影响.另外,对门的位置可以看做一个位置.
思路:将每一条移动路线看做一条直线,假设所有的移动同时进行,则会有多个地方出现直线重叠的情况,求出重叠的最大层数(有多少条直线在同一处重叠最多)
C++代码如下
#include<iostream>#include<algorithm>using namespace std;int main(){int T;cin >> T;//测试次数 int start,end;//每次移动的起始位置 while(T--){int n;//每次测试中,移动的个数 cin >> n;int a[200] = {0};//记录每个位置的重叠的次数,开始都为0.//一共有400个房间,由于对门位置看做一个位置,所以共有200个位置. for(int i=0;i<n;i++)//针对每个移动而言. {cin >> start >> end;start = (start+1)/2;end = (end+1)/2;//这样处理之后,对门位置变为一个位置.可以把两个 + 同时改为 - 也正确. int max = std::max(start,end);//为了下面循环而作的处理 int min = std::min(start,end);for(int k=min;k<=max;k++)//看看这个移动为200个位置上的重叠次数的贡献是多大. a[k] ++;}int max = -1;for(int i=0;i<200;i++)//找出数组a中最大值 {if(a[i]>max){max = a[i];}}cout << 10*max << endl;}return 0;}参考:
http://www.cnblogs.com/ahu-shu/p/3551829.html
0 0
- 【hdoj_1050】Moving Tables
- HDOJ_1050 Moving Tables 解题报告
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- Moving Tables
- moving tables
- Moving Tables
- Python3 引号
- phpstorm xdebug总结
- VMware虚拟机中安装Oracle在宿主机中使用PLSQL Developer连接教程
- poj3349 Snowflake Snow Snowflakes —— 哈希表
- 华为OJ:计算字符串中含有的不同字符的个数
- 【hdoj_1050】Moving Tables
- 技术宅找女朋友的技术分析
- 字符数组2
- PMI权限(授权)管理基础设施
- 面试的角度诠释Java工程师(二)
- 一个低级的ORA-01017错误
- 环境变量配过了,依然找不到路径,办法
- String普通版本
- 菜狗的C++ primer读书笔记:第三章 字符串、向量和数组