540 - Team Queue***

来源:互联网 发布:java多态的实现方式 编辑:程序博客网 时间:2024/06/05 12:03
//提交未成功#include <iostream>#include <string>#include <cstdio>#include <sstream>using namespace std;const int nMax=1005;struct Queue{int q[nMax];int front,rear;Queue():front(0),rear(0){}}queue[nMax];struct Team{int t[nMax];int n;//n表示元素个数Team():n(0){}}team[nMax];int t,n;int getTeam(int x){for(int i=0;i<n;i++){for(int j=0;j<team[i].n;j++)if(team[i].t[j]==x)return i;}return -1;}void EnQueue(int u,int a){queue[u].q[queue[u].front++]=a;}int DeQueue(){for(int i=0;i<n;i++){for(int j=queue[i].rear;j<queue[i].front;j++){return queue[i].q[queue[i].rear++];}}return -1;}int main(){/*freopen("data.in","r",stdin);freopen("data.out","w",stdout);//*/int cas=0;while(scanf("%d",&t) && t!=0){cas++;printf("Scenario #%d\n",cas);for(int i=0;i<t;i++){scanf("%d",&n);team[i].n=n;for(int j=0;j<n;j++)scanf("%d",&team[i].t[j]);}string command;while(getline(cin,command) && command!="STOP"){istringstream in(command);string oper;in>>oper;if(oper=="ENQUEUE"){int a;in>>a;int u;u=getTeam(a);EnQueue(u,a);}else if(oper=="DEQUEUE"){int a=DeQueue();if(a!=-1)printf("%d\n",a);}}printf("\n");}return 0;}

#include <iostream>#include <cstdio>#include <string>#include <list>using namespace std;list<int> l;int elem[1000000];//暴力求解--思想list<int>::iterator team[1005];int t,n;int main(){//freopen("data.in","r",stdin);int cas=0;while(scanf("%d",&t) && t){printf("Scenario #%d\n",++cas);l.clear();for(int i=1;i<=t;i++){team[i]=l.end();int n;scanf("%d",&n);for(int j=0;j<n;j++){int a;scanf("%d",&a);elem[a]=i;}}string oper;while(cin>>oper && oper!="STOP"){if(oper=="ENQUEUE"){int b;scanf("%d",&b);if(team[elem[b]]!=l.end()){++team[elem[b]];team[elem[b]]=l.insert(team[elem[b]],b);}elseteam[elem[b]]=l.insert(team[elem[b]],b);}else if(oper=="DEQUEUE"){int temp;temp=l.front();if(team[elem[temp]]==l.begin())//漏写team[elem[temp]]=l.end();printf("%d\n",temp);l.pop_front();}}printf("\n");}return 0;}

第二次做:未通过

#include <cstdio>#include <cstring>const int nMax=1000+10;struct Queue{int q[nMax];int front,rear;}queue[nMax];int team[1000000];//哈希表处理查找问题,会方便很多int t;void dequeue(){for(int i=0;i<t;i++)if(queue[i].front!=queue[i].rear){printf("%d\n",queue[i].q[queue[i].rear++]);return;}}int main(){//freopen("f://data.in","r",stdin);int n=0;while(scanf("%d",&t) && t){printf("Scenario #%d\n",++n);memset(team,0,sizeof(team));memset(queue,0,sizeof(queue));for(int ans=0;ans<t;ans++){int k;scanf("%d",&k);while(k--){int num;scanf("%d",&num);team[num]=ans;}}char opr[10];while(scanf("%s",opr)){if(strcmp(opr,"STOP")==0)break;else if(strcmp(opr,"ENQUEUE")==0){int a;scanf("%d",&a);int pos=team[a];queue[pos].q[queue[pos].front++]=a;}else if(strcmp(opr,"DEQUEUE")==0){dequeue();}}printf("\n");}return 0;}