Moving Tables---(贪心)
Problem Description
The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure.
|
Input
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.
|
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
Asia 2001, Taejon (South Korea)
|
题意:一条走廊,现在要移动桌子,从a房间移动到b房间,有交叉的地方不能同时移,即走廊的宽度只能容纳一个桌子。
分析:首先将左右的房间进行压缩,如1-2,压缩成1,即相对的房间变成了一个房间。然后一条一条的扫,经过的房间就加上1.最后求出经过房间的最大次数。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define INF 0x3f3f3f3f 7 const int maxn = 200+10; 8 int corridor[maxn]; 9 int T; 10 int ans=-INF; 11 12 int main(){ 13 // freopen("input.txt","r",stdin); 14 // freopen("output.txt","w",stdout); 15 cin>>T; 16 while(T--){ 17 memset(corridor,0,sizeof(corridor)); 18 int n; 19 int s,t; 20 cin>>n; 21 for( int i=0; i<n; i++ ){ 22 cin>>s>>t; 23 if(s>t) swap(s,t); 24 s=(s+1)/2; 25 t=(t+1)/2; 26 for( int j=s; j<=t; j++ ){ 27 corridor[j]++; 28 } 29 } 30 ans=-INF; 31 for(int i=0; i<=200; i++ ){ 32 ans=max(ans,corridor[i]); 33 } 34 cout<<ans*10<<endl; 35 } 36 return 0; 37 }
有些目标看似很遥远,但只要付出足够多的努力,这一切总有可能实现!