poj2259 Team Queue

吼哇,又是水题。

我本来准备开1010个queue的,但是STL容器里好像只有vector滋磁开组,于是只好数组模拟...

然后模拟过了......

 1 #include <cstdio>
 2 #include <map>
 3 const int N = 1010;
 4 
 5 int Q[N + 1][N + 1];
 6 std::map<int, int> mp;
 7 
 8 int main() {
 9     char c[20];
10     int n, m, x, T = 0;
11     while(scanf("%d", &n)) {
12         if(n == 0) break;
13         T++;
14         printf("Scenario #%d\n", T);
15         for(int i = 0; i <= N; i++) {
16             Q[i][N] = Q[0][i] = 0;
17             Q[i][0] = 1;
18         }
19         mp.clear();
20 
21         for(int i = 1; i <= n; i++) {
22             scanf("%d", &m);
23             for(int j = 1; j <= m; j++) {
24                 scanf("%d", &x);
25                 mp[x] = i;
26             }
27         }
28         while(scanf("%s", c)) {
29             if(c[0] == 'S') break;
30             if(c[0] == 'E') { /// 进队
31                 scanf("%d", &x);
32                 int p = mp[x];/// 所在队
33                 if(Q[p][0] == Q[p][N] + 1) {
34                     Q[0][N]++;
35                     Q[0][Q[0][N]] = p;
36                 }
37                 Q[p][N]++;
38                 Q[p][Q[p][N]] = x;
39             }
40             else { /// 出队
41                 int p = Q[0][Q[0][0]];
42                 printf("%d\n", Q[p][Q[p][0]]);
43                 Q[p][0]++;
44                 if(Q[p][0] == Q[p][N] + 1) {
45                     Q[0][0]++;
46                 }
47             }
48         }
49     printf("\n");
50     }
51     return 0;
52 }
AC代码

 

posted @ 2018-05-18 10:28  garage  阅读(68)  评论(0编辑  收藏  举报