WA了,实在想不明白哪里出了问题
查看原帖
WA了,实在想不明白哪里出了问题
28048
imlyq楼主2022/8/23 15:47

检查了好久,对拍也跑了好多次,没查出什么问题,输出格式也是正确的,就是答案错了

#include <bits/stdc++.h>

typedef struct QUEUE
{
	int data[1002];				//队列数据
	int front, rear;			//队首、队尾
}Queue;

void initqueue(Queue &q){		//初始化队首和队尾
	q.front = 0;
	q.rear = 0;
}
void pushup(Queue &q, int num){	//元素入队
	q.rear %= 1001;
	q.data[q.rear++] = num;		//元素入队,在尾部添加
}
int pop(Queue &q){				//元素出队
	q.front %= 1001;
	return q.data[q.front++];	//返回队首的元素,并且队首++
}
int empty(Queue q){				//检测队列是否为空
	return (q.front == q.rear);	//若队首队尾指向同一处,说明该队列为空
}

Queue team[1002];				//以人员编号为元素的队列
int k,n,num,count = 0,f[1000001];			
//team为队伍数,n为队伍中的人数,k用于读取每个人的编号
//count记录第几组提问,f[i]得到编号为i的人所在的队伍
int main(){
	Queue q;							//以队伍编号为元素的队列
	while (scanf("%d",&num), num){		//读取某组提问中队伍数,0表示结束
		initqueue(q);					//初始化记录队伍的队列
		if (count != 0)
			printf("\n\n");
		printf("Scenario #%d",++count);	
		for (int i=1; i<=num; i++){		//读取队伍人员编号
			initqueue(team[i]);			//初始化记录每个队伍的人员的队列
			scanf("%d",&n);				//读取人数
			for (int j=0; j<n; j++){
				scanf("%d",&k);			//读取编号
				f[k] = i;				//f存储每个人的队伍,队伍编号从0开始
			}
		}
		char order[20];		//记录指令
		int who,which;		//who表示要操作的人的编号,which为这个人所在的队伍
		while (scanf("%s",order), order[0] != 'S'){		//只要不是“STOP”,继续操作
			if (order[0] == 'E'){				//入队
				scanf("%d",&who);				//操作对象
				which = f[who];					//对象所在队伍
				if (empty(team[which]))			//没有队友,排到末尾
					pushup(q, which);			//记录队伍的队列入队
				pushup(team[which], who);		//进入队伍中
			}
			else if (order[0] == 'D'){		//出队
				if (empty(q))				//空队列时不出队
					continue;
				which = q.data[q.front];	//哪个队伍
				who = pop(team[which]);		//这个队伍中的第一个即将出队
				if (empty(team[which]))		//出队后空了
					pop(q);					//记录队伍的队列就要出队
				printf("\n%d",who);			//输出刚才出队的人的编号
			}
		}
	}
	return 0;
}
2022/8/23 15:47
加载中...