这道题目还是比较简单的,只要做题的思路正确,那么解题应该是很迅速的。
但是犯了一个很弱智的错误
string s
scanf("%s",s)
这样的形式会在访问s的时候,比如s[0],报string越界的错误
下面贴出代码
#include<cstdio> #include<queue> #include<cstring> #include<string> #include<map> using namespace std; //难点在于如何保存某个元素属于哪个队 map<int,int>ele_team; int num_team=0,num_element,kase=0; int is_in_queue[1005]; char comd[20]; void print_queue() { printf("\n"); for(int i=0;i<num_team;i++) { printf(" %d ",is_in_queue[i]); } printf("\n\n"); } int main() { #ifdef local freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif while(scanf("%d",&num_team)==1&&num_team) { printf("Scenario #%d\n",++kase); queue<int>Q[1005]; queue<int>team; memset(is_in_queue,0,sizeof(is_in_queue)); for(int i=0;i<num_team;i++) { int num_element; scanf("%d",&num_element); for(int j=0;j<num_element;j++) { int elements; scanf("%d",&elements); ele_team[elements]=i; } } while(scanf("%s",comd)) { //printf("%s\n",comd); if(comd[0]=='S') { printf("\n"); break; } if(comd[0]=='E') { int elements; scanf("%d",&elements); //printf("%d\n",elements); if(!is_in_queue[ele_team[elements]])//不在队中 { team.push(ele_team[elements]); is_in_queue[ele_team[elements]]=1; } Q[ele_team[elements]].push(elements); } if(comd[0]=='D') { int x=team.front(); int elements=Q[x].front(); printf("%d\n",elements); Q[x].pop(); if(Q[x].empty()) { team.pop(); is_in_queue[x]=0; } } //print_queue(); } } }
正如上面所述:难点应该在如何保存每一个elelments所对应的队