POJ1083Moving Tables(簡單模擬)

題目連接:http://poj.org/problem?id=1083ios

 

如圖所示在一條走廊的兩側各有200個房間,如今給定一些成對的房間相互交換桌子,可是走廊每次只能經過一組搬運,
也就是說若是兩個搬運過程有交叉是不能同時搬運的,要依次來,一次搬運10min,問完成全部的搬運的最少用時。
 
思路:將每一個左右相鄰房間的走廊做爲一個統計單位,當全部的辦公桌都搬運完成後,檢查每一個走廊對應的統計單位被佔用多少次。
統計全部的左右相鄰房間的走廊被佔用的最大次數,就是單獨安排的搬運次數,乘以10就是總的搬運時間。
另外,將from和to作-1 mod 2 處理是爲了與數組下標對應起來,方便處理
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <functional>
 4 #include <string.h>
 5 #include <cstdio>
 6 using namespace std;
 7 
 8 int main()
 9 {
10     int t = 0;
11     cin >> t;
12     while (t-- > 0)
13     {
14         // 每兩個房間之間一個走廊,總共200個走廊
15         int move[200];
16         int n = 0; // 搬運次數
17         cin >> n;
18         memset(move, 0, sizeof(move));
19         for (int i = 0; i < n; i++)
20         {
21             int from = 0, to = 0;
22             cin >> from >> to;
23             from = (from - 1) / 2;
24             to = (to - 1) / 2;
25             if (to < from)
26             {
27                 swap(from, to);
28             }
29             for (int j = from; j <= to; j++)
30             {
31                 move[j]++;
32             }
33         }
34         int max = 0;
35         for (int i = 0; i < 200; i++)
36         {
37             if (move[i] > max)
38             {
39                 max = move[i];
40             }
41         }
42         cout << max * 10 << "\n";
43     }
44     return 0;
45 }
View Code
相關文章
相關標籤/搜索