POJ 2259 Team Queue(佇列)
阿新 • • 發佈:2020-07-17
解題思路
這個題顯然是用佇列做的,但是單純的一維佇列無法解決這個問題,因為要涉及到插隊問題,所以我們要用一個二維的佇列來儲存完成入隊和出隊操作,但是這樣的話,我們無法得知每個隊伍的先後順序,所以我們還需要再用一個一維佇列來儲存小隊的順序。
程式碼
const int maxn = 1e3+10; const int maxm = 1e6+10; int id[maxm]; int main() { int t, kase = 1; while(~scanf("%d",&t) && t) { printf("Scenario #%d\n",kase++); queue<int> team, mr[maxn]; int teamid = 0; while(t--) { ++teamid; int n; scanf("%d",&n); for (int i = 0,num; i<n; ++i) { scanf("%d",&num); id[num] = teamid; } } char str[10]; while(~scanf("%s",str) && str[0]!='S') { if (str[0]=='E') { int num; scanf("%d",&num); if (mr[id[num]].empty()) { team.push(id[num]); mr[id[num]].push(num); } else mr[id[num]].push(num); } else if (str[0]=='D') { printf("%d\n", mr[team.front()].front()); mr[team.front()].pop(); if (mr[team.front()].empty()) team.pop(); } } putchar(endl); } return 0; }