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 }