这是怎么 RE 的
查看原帖
这是怎么 RE 的
995753
__Octhyccc__楼主2024/7/4 18:59

Rt,求看一下,发现队列 q\text q 在 empty\text {empty} 的时候依然 pop\text{pop},这是哪里导致的?

#include<bits/stdc++.h>
using namespace std;
struct cards{int x;char y;}dis;
struct Unknown{int x,id;char y;}uk;
vector<cards>v[11],sum;
queue<cards>q;
int p,m,n,now,k=1,ans;
void read(){
	cards use;
	for(int i=0;i<n;i++){
		cin>>use.x>>use.y;
		sum.push_back(use);
	}
	for(int i=0;i<p*m;i++)v[i/m].push_back(sum[i]);
	dis=sum[p*m];
	for(int i=p*m+1;i<n;i++)q.push(sum[i]);
	return;
}
int choose(vector<cards>ve,cards yy){//C D H S
	Unknown maxn=(Unknown){-1,-1,'\0'};
	for(int i=0;i<ve.size();i++){
		if(ve[i].x>maxn.x && (ve[i].x==yy.x || ve[i].y==yy.y))maxn.x=ve[i].x,maxn.y=ve[i].y,maxn.id=i;
		else if(ve[i].y>maxn.y && maxn.x<=ve[i].x && (ve[i].x==yy.x || ve[i].y==yy.y))maxn.x=ve[i].x,maxn.y=ve[i].y,maxn.id=i;
	}
	return maxn.id;
}
void DealTheFirst(){
	if(dis.x==1){
		v[0].push_back(q.front());
		q.pop();now+=k;
	}
	else if(dis.x==12)k=-k;
	else if(dis.x==11)now+=k;
	else if(dis.x==7){
		v[0].push_back(q.front());q.pop();
		v[0].push_back(q.front());q.pop();
		now+=k;
	}
	return;
}
void be(){
	for(int i=0;i<=11;i++)v[i].clear();
	while(!q.empty())q.pop();
	k=1,ans=0;p=m=n=now=0;
	return;
}
int give(int x){
	if(x+k>=p)return 0;
	else if(x+k<0)return p-1;
	else return x+k;
}
int main(){
	while(scanf("%d%d%d",&p,&m,&n) && (p || m || n)){
		read();
		DealTheFirst();
		while(1){
			int next=give(now);
			int dealt=choose(v[now],dis);
			if(dealt==-1){
				v[now].push_back(q.front());
				q.pop();
				now=give(now);continue;
			}
			dis=v[now][dealt];
			v[now].erase(v[now].begin()+dealt);
			if(v[now].size()==0){ans=now+1;break;}
			if(dis.x==12)k=-k;
			else if(dis.x==7){
				v[next].push_back(q.front());q.pop();
				v[next].push_back(q.front());q.pop();
				now=next;
			}
			else if(dis.x==1){
				v[next].push_back(q.front());q.pop();
				now=next;
			}
			else if(dis.x==11)now=next;
			now=give(now);
		}
		printf("%d\n",ans);
		be();
	}
	return 0;
}
2024/7/4 18:59
加载中...