Rt,求看一下,发现队列 q 在 empty 的时候依然 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;
}