POJ1083 Moving Tables
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 35297   Accepted: 11774

Description

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.

Input

The input consists of T test cases. The number of test cases ) (T is given in the first line of the input file. 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 3 + N -rd 
line, the remaining test cases are listed in the same manner as above.

Output

The output should contain the minimum time in minutes to complete the moving, one per line.

Sample Input

3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50

Sample Output

10
20
30

Source

 
解题思路:
     酒店有400个房间,如下编号对称分布在一条走廊两侧
     1 3 5 ... 397 399
        这里是走廊
     2 4 6 ... 398 400
 
     现在要从房间s->t搬桌子,有N组房间需要搬桌子,每搬一次10分钟(不论两个房间相隔多远).
     对于某组房间,搬桌子期间 s->t 之间的走廊会被占用,
     而其他组房间若没有使用到占用的走廊,则可同时搬,否则要等待.
     特别地,相对的两间房,共用一段走廊, 即若房间3的走廊被占用了,等同于房间4的走廊被占用了.
 
     给定N组需要搬的桌子,求最小可以搬完的时间.
 
 
    解题思路:
     感觉这题有点类似于多线程的同步互斥场景问题.
 
     ① 由于相对的两间房共用同一段走廊,为了方便处理问题,可以把所有奇数房间转换成偶数房间,反之亦可.
        如 1->6 可等价转换成 2->6, 尔后只需要关注一侧的房间即可(共200间)
     ② 根据房间号对走廊进行分割,可分割成200段走廊. 在从房间s->t搬桌子期间,对所使用到的每段走廊计数+1
     ③ 所有桌子搬完后,统计每段走廊的计数值(计数值代表这段走廊总共需要被占用的次数),
        由于题目并不考虑搬动期间的移动过程因素(类比多线程的事务锁),
        因此最大的一个计数值*10分钟 就是所求的最小搬完时间(因为只要走廊被占着,就只能在下一次再搬,不能同时搬)
#include <iostream>
using namespace std; const static int ROOM_NUM = ; // 最大房号
const static int TIME_UNIT = ; // 时间单位 /*
* 把偶数房号转换成奇数房号
* even 偶数房号
* return 奇数房号
*/
int toOdd(int even); void solve(void); int main(void) {
int testCase = ;
cin >> testCase;
for(int t = ; t < testCase; t++) {
solve();
} //system("pause");
return ;
} int toOdd(int even) {
return (even % == ? even - : even);
} void solve(void) {
int useCnt[ROOM_NUM] = { }; // 每个房间前的走廊被使用的次数
int maxUseCnt = ; // 被使用最多的次数 int moveCnt = ; // 需要搬动的桌子组数
cin >> moveCnt;
int* fromRooms = new int[moveCnt]; // 起点房间集
int* toRooms = new int[moveCnt]; // 终点房间集
for(int i = ; i < moveCnt; i++) {
int from, to;
cin >> from >> to; // 使房号小的在前面
fromRooms[i] = (from <= to ? from : to);
toRooms[i] = (from > to ? from : to); // 把房号全部转换成奇数
fromRooms[i] = toOdd(fromRooms[i]);
toRooms[i] = toOdd(toRooms[i]); // 相关房间前占用的走廊被使用次数+1
for(int roomId = fromRooms[i]; roomId <= toRooms[i]; roomId += ) {
useCnt[roomId]++;
if(maxUseCnt < useCnt[roomId]) {
maxUseCnt = useCnt[roomId]; // 登记最大的使用次数
}
}
}
delete[] fromRooms;
delete[] toRooms; // 计算最小的使用时间
maxUseCnt = (maxUseCnt <= || maxUseCnt > moveCnt ? moveCnt : maxUseCnt);
int minUsedTime = maxUseCnt * TIME_UNIT;
cout << minUsedTime << endl;
}

POJ1083 Moving Tables的更多相关文章

  1. POJ1083 Moving Tables(模拟)

    The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in ...

  2. 解题报告:poj1083 Moving tables

    2017-09-02 19:49:59 writer:pprp 题意说明: 比较简单的题,一开始被吓到了,后来才发现,其实可以用很简单的方法就可以解决: 就是在这样的房间中如果在i 和 j 中之后的1 ...

  3. POJ1083(Moving Tables)--简单模拟

    题目链接:http://poj.org/problem?id=1083 如图所示在一条走廊的两侧各有200个房间,现在给定一些成对的房间相互交换桌子,但是走廊每次只能通过一组搬运, 也就是说如果两个搬 ...

  4. Moving Tables(贪心或Dp POJ1083)

    Moving Tables Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28304   Accepted: 9446 De ...

  5. zstu.2512. Moving Tables(贪心)

     Moving Tables Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1182  Solved: 563 Description The famo ...

  6. HDOJ 1050 Moving Tables

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  7. 1050 Moving Tables

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  8. Moving Tables

    Moving Tables Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  9. hdoj 1050 Moving Tables【贪心区间覆盖】

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

随机推荐

  1. scrapy学习笔记之hello world

    1. 创建项目文档 在目标路径下,打开命令行,使用如下命令创建项目,例如项目名称为 "tutorial": scrapy startproject tutorial - 创建项目时 ...

  2. http协议常见状态码含义

    状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 2xx:成功--表示请求已被成功接收.理解.接受 200(成功)  服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. ...

  3. Qt学习资料

    网址:http://www.qter.org/portal.php?mod=list&catid=18 qt开源社区 (门户)里面有在线学习资料(讲的比较粗略 但是进程比较快 适用于快速学习) ...

  4. Restful levels&HATEOAS详解

    RESTful: Rest是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等 ...

  5. java学习之路重新出发

    一.Java发展史: 1995年由詹姆斯高斯林带领团队开发 java问世 2004  jdk1.5版本更名jdk5.0 2010  sun公司被oracle公司收购  二.java三大体系: java ...

  6. 解决MOFH免费空间cpanel面板大文件无法解压的情况

    解决办法: 解压大文件,重新压缩为tar格式的压缩格式,这样可以更小,而且也可以在cpanel面板解压,记得使用filezilla软件上传文件,在cpanel的网页界面不要刷新,一刷新就不可以解压大文 ...

  7. Sql 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_90_CI_AI" 之间的排序规则冲突

    导致问题原因为创建时,表所使用的排序规则不一致 解决办法: 在对比条件后增加 collate Chinese_PRC_90_CI_AI 的转义即可 如: where test1.FieldName = ...

  8. 引擎设计跟踪 地形LOD的改进

    虽然地形已经有LOD和形变(geomorphing, 这里简称morphing)来进行LOD的渐变,从而避免bump, 但是如果LOD级别过多,远处的高山就会严重丢失细节,比如变成尖尖的凸起,非常丑陋 ...

  9. SQL server 多个字段设为主键

    create table teacher_course( ton char(8) not null, classno char(8) not null, con char(4) not null pr ...

  10. 微信小程序自运营器 微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营)

    自动发单,自动评价,自动评论,自动推广 微信小程序自运营器  微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营) 我们会根据你的微信公众号或微信小程序定制开发带有一定AI智 ...