Piotr's Ants UVa 10881

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <cstring>
 6 #include <queue>
 7 #include <vector>
 8 #define maxn 10005
 9 #define L -1
10 #define R 1
11 #define fell 10
12 #define Turning  -10
13 #define On 0;
14  
15 using namespace std;
16 struct ants{
17     int location;
18     int direction;
19     int inputorder;
20     int state;
21     bool operator < (const ants& a) const{
22         return location <a.location;
23     }
24 }Ant[maxn];
25 
26 int main(){
27     //if(freopen("input.txt","r",stdin)== NULL)  {printf("Error\n"); exit(0);}
28 
29     int n,l,T;
30     int N;
31     cin>>N;
32     for(int test=1;test<=N;test++){
33         cin>>l>>T>>n;
34         int a;
35         char ch;
36         for(int i=1;i<=n;i++){
37             cin>>a>>ch;
38             
39             if(ch == 'R')    Ant[i].direction = R;
40             else             Ant[i].direction = L;
41             Ant[i].location = a;
42             Ant[i].inputorder = i;
43         }
44         sort(Ant+1,Ant+n+1);
45         int order[maxn];
46         for(int i=1;i<=n;i++){
47             order[Ant[i].inputorder] = i;
48         }
49         
50         for(int i=1;i<=n;i++) Ant[i].location += T * Ant[i].direction;
51         
52         sort(Ant+1,Ant+n+1);
53         
54         for(int i=1;i<=n;i++)  
55            if(Ant[i].location < 0 || Ant[i].location > l)
56              Ant[i].state = fell; 
57            else if(Ant[i].location == Ant[i+1].location && i < n) {
58                 Ant[i].state = Ant [i+1].state = Turning;
59                 i++;
60               }  
61            else 
62              Ant[i].state = On;          
63         printf("Case #%d:\n",test);
64         
65         for(int i=1;i<=n;i++){
66             int j = order[i];
67             if(Ant[j].state == fell) printf("Fell off\n");
68             else if(Ant[j].state == Turning){
69                 printf("%d Turning\n",Ant[j].location);
70             }
71             else
72                 printf("%d %c\n",Ant[j].location,Ant[j].direction == R ? 'R' : 'L');
73    
74         }   
75         printf("\n");  
76     }
77 }
View Code

 

posted @ 2013-07-09 20:27  等待最好的两个人  阅读(186)  评论(0编辑  收藏  举报