中國人排隊問題
題目連結
這一題有一個條件有點難維護,就是如果同一團體的人要排隊
而隊中已經有同一團人在裡面時,他就要排在團裡面最後一個位置
因此要用iterator 陣列指向每個團隊的末端之類的
好好維護細節可以減少debug 的時間!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include <bits/stdc++.h> using namespace std; int n,cnt = 1;
int main(){ while(cin>>n){ cout<<"Line #"<<cnt<<endl; int arr[1000005],gt[1005]; memset(arr, 0, sizeof(arr)); memset(gt, 0, sizeof(gt)); for(int i=1;i<=n;i++){ int k;cin>>k; for(int j=0;j<k;j++){ int temp;cin>>temp; arr[temp] = i; } } list<int> ls; list<int>::iterator it[1005]; while(true){ string s;int cur; cin>>s; if(s[0]=='E'){ cin>>cur; int i = arr[cur]; if(i>0){ if(gt[i]==0){ ls.push_back(cur); it[i] = --ls.end(); } else{ it[i] = ls.insert(++it[i],cur); } gt[i]++; } else ls.push_back(cur); } else if(s[0]=='D'){ int i = ls.front(); if(arr[i]>0)gt[arr[i]]--; cout<<ls.front()<<endl; ls.pop_front(); } else break; } cnt++; } }
|