2014-10-22 22:42:20

花了几个小时做了四道题。

 

B题大模拟...搞了很久,最后是把繁琐的STL全部去掉才过的TAT。

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <iostream>
  4 using namespace std;
  5 typedef long long ll;
  6 
  7 int T,n,sz,altop,alpos;
  8 struct node{
  9     int p,w;
 10 }no[10010];
 11 
 12 void Move(int pos){
 13     if(alpos && alpos <= pos){
 14         if(alpos == pos)    alpos = 1;
 15         else    alpos++;
 16     }
 17     node tmp = no[pos];
 18     for(int i = pos; i > 1; --i)
 19         no[i] = no[i - 1];
 20     no[1] = tmp;
 21 }
 22 
 23 int main(){
 24     int a;
 25     char s[20];
 26     scanf("%d",&T);
 27     while(T--){
 28         memset(no,0,sizeof(no));
 29         altop = alpos = sz = 0;
 30         scanf("%d",&n);
 31         for(int Case = 1; Case <= n; ++Case){
 32             printf("Operation #%d: ", Case);
 33             scanf("%s",s);
 34             if(s[0] == 'A'){    //Add
 35                 scanf("%d",&a);
 36                 int flag = 0;
 37                 for(int i = 1; i <= sz; ++i) if(no[i].p == a){
 38                     flag = 1; break;
 39                 }
 40                 if(flag){ //已经存在
 41                     printf("same priority.\n");
 42                     continue;
 43                 }
 44                 no[++sz].p = a;
 45                 no[sz].w = 0;
 46                 printf("success.\n");
 47             }
 48             else if(s[0] == 'C' && s[1] == 'l'){  //Close
 49                 scanf("%d",&a);
 50                 int pos = 0;
 51                 for(int i = 1; i <= sz; ++i) if(no[i].p == a){
 52                     pos = i;
 53                     break;
 54                 }
 55                 if(pos == 0){ //不存在
 56                     printf("invalid priority.\n");
 57                     continue;
 58                 }
 59                 printf("close %d with %d.\n",no[pos].p,no[pos].w);
 60                 if(alpos > pos)   --alpos;
 61                 for(int i = pos + 1; i <= sz; ++i)
 62                     no[i - 1] = no[i];
 63                 --sz;
 64                 if(altop == a)      altop = alpos = 0;
 65             }
 66             else if(s[0] == 'C' && s[1] == 'h' && s[2] == 'a'){ //Chat
 67                 scanf("%d",&a);
 68                 if(sz == 0){
 69                     printf("empty.\n");
 70                     continue;
 71                 }
 72                 if(altop)    no[alpos].w += a;
 73                 else    no[1].w += a;
 74                 printf("success.\n");
 75             }
 76             else if(s[0] == 'R'){    //Rotate
 77                 scanf("%d",&a);
 78                 if(a < 1 || a > sz){
 79                     printf("out of range.\n");
 80                     continue;
 81                 }
 82                 Move(a);
 83                 printf("success.\n");
 84             }
 85             else if(s[0] == 'P'){    //Prior
 86                 if(sz == 0){
 87                     printf("empty.\n");
 88                     continue;
 89                 }
 90                 int pos = 1;
 91                 for(int i = 1; i <= sz; ++i) if(no[i].p > no[pos].p)
 92                     pos = i;
 93                 Move(pos);
 94                 printf("success.\n");
 95             }
 96             else if(s[0] == 'C' && s[1] == 'h' && s[2] == 'o'){ //Choose
 97                 scanf("%d",&a);
 98                 int pos = 0;
 99                 for(int i = 1; i <= sz; ++i) if(no[i].p == a){
100                     pos = i;
101                     break;
102                 }
103                 if(pos == 0){ //不存在
104                     printf("invalid priority.\n");
105                     continue;
106                 }
107                 Move(pos);
108                 printf("success.\n");
109             }
110             else if(s[0] == 'T'){ //Top
111                 scanf("%d",&a);
112                 int pos = 0;
113                 for(int i = 1; i <= sz; ++i) if(no[i].p == a){
114                     pos = i;
115                     break;
116                 }
117                 if(pos == 0){ //不存在
118                     printf("invalid priority.\n");
119                     continue;
120                 }
121                 altop = a;
122                 alpos = pos;
123                 printf("success.\n");
124             }
125             else{ //Untop
126                 if(alpos == 0){
127                     printf("no such person.\n");
128                     continue;
129                 }
130                 altop = alpos = 0;
131                 printf("success.\n");
132             }
133         }
134         if(alpos && no[alpos].w)
135             printf("Bye %d: %d\n",altop,no[alpos].w);
136         for(int i = 1; i <= sz; ++i) if(no[i].w && no[i].p != altop)
137             printf("Bye %d: %d\n",no[i].p,no[i].w);
138     }
139     return 0;
140 }
View Code

相关文章: