hdu 1050 Moving Tables
2016-04-15 19:12
387 查看
[align=left]Problem Description[/align]
The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure.
The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a plan to reform its system. The reform includes moving a lot of tables between rooms. Because the corridor is narrow and all the tables are big, only one table can pass through the corridor. Some plan is needed to make the moving efficient. The manager figured out the following plan: Moving a table from a room to another room can be done within 10 minutes. When moving a table from room i to room j, the part of the corridor between the front of room i and the front of room j is used. So, during each 10 minutes, several moving between two rooms not sharing the same part of the corridor will be done simultaneously. To make it clear the manager illustrated the possible cases and impossible cases of simultaneous moving.
For each room, at most one table will be either moved in or moved out. Now, the manager seeks out a method to minimize the time to move all the tables. Your job is to write a program to solve the manager’s problem.
[align=left]Input[/align]
The input consists of T test cases. The number of test cases ) (T is given in the first line of the input. Each test case begins with a line containing an integer N , 1<=N<=200 , that represents the number of tables to move. Each of the following N lines contains two positive integers s and t, representing that a table is to move from room number s to room number t (each room number appears at most once in the N lines). From the N+3-rd line, the remaining test cases are listed in the same manner as above.
[align=left]Output[/align]
The output should contain the minimum time in minutes to complete the moving, one per line.
[align=left]Sample Input[/align]
3 4 10 20 30 40 50 60 70 80 2 1 3 2 200 3 10 100 20 80 30 50
[align=left]Sample Output[/align]
10 20 30
The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure.
The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a plan to reform its system. The reform includes moving a lot of tables between rooms. Because the corridor is narrow and all the tables are big, only one table can pass through the corridor. Some plan is needed to make the moving efficient. The manager figured out the following plan: Moving a table from a room to another room can be done within 10 minutes. When moving a table from room i to room j, the part of the corridor between the front of room i and the front of room j is used. So, during each 10 minutes, several moving between two rooms not sharing the same part of the corridor will be done simultaneously. To make it clear the manager illustrated the possible cases and impossible cases of simultaneous moving.
For each room, at most one table will be either moved in or moved out. Now, the manager seeks out a method to minimize the time to move all the tables. Your job is to write a program to solve the manager’s problem.
[align=left]Input[/align]
The input consists of T test cases. The number of test cases ) (T is given in the first line of the input. Each test case begins with a line containing an integer N , 1<=N<=200 , that represents the number of tables to move. Each of the following N lines contains two positive integers s and t, representing that a table is to move from room number s to room number t (each room number appears at most once in the N lines). From the N+3-rd line, the remaining test cases are listed in the same manner as above.
[align=left]Output[/align]
The output should contain the minimum time in minutes to complete the moving, one per line.
[align=left]Sample Input[/align]
3 4 10 20 30 40 50 60 70 80 2 1 3 2 200 3 10 100 20 80 30 50
[align=left]Sample Output[/align]
10 20 30
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; struct node { int x,y; } data[205]; int ins[205]; bool cmp(const node &a,const node &b) { if(a.x<b.x) return true; else if(a.x==b.x) { if(a.y<b.y) return true; else return false; } else return false; } int main() { int c,n,ans; cin>>c; while(c--) { memset(ins,0,sizeof(ins)); ans=0; cin>>n; for(int i=0;i<n;i++) { cin>>data[i].x>>data[i].y; if(data[i].x>data[i].y) { int t; t=data[i].y; data[i].y=data[i].x; data[i].x=t; } if(data[i].y%2!=0) data[i].y++; if(data[i].x%2==0) data[i].x--; } sort(data,data+n,cmp); for(int i=0;i<n;i++) { if(ins[i]==0) { ins[i]=1; ans++; int m=data[i].y; for(int j=i+1;j<n;j++) { if(data[j].x>m&&ins[j]==0) { m=data[j].y; ins[j]=1; } } } } cout<<ans*10<<endl; } return 0; }
相关文章推荐
- 在ubuntu中配置桥接模式(解决每次重启resolv.conf都失效的问题)
- Ubuntu14.04下安装与编译ns-3
- UITableView常见 UI 问题总结
- Android课程---添加黑名单的练习(课堂讲解)
- Linux下添加新硬盘,分区及挂载
- HTTP协议基础(渗透基础:状态码,cookie,session)
- 国内外的几大主流浏览器性能比较
- Android瀑布流照片墙、滑动切换图片
- 感恩和珍惜现在的生活
- &(引用 取址)+指针
- confluence 安装部署
- 《Google重新定义公司》
- TimesTen 应用层数据库缓存学习:8. 配置Sliding Window(滑动窗口)
- jdk 安装
- Linux磁盘管理
- 241. Different Ways to Add Parentheses 分治法的应用
- js常用功能汇总
- 冒泡排序
- jmeter解析json
- 自定义控件之对现有控件拓展(一)