通过对比后发现,我的输出相比标准输出最后多了很多K,有可能是什么地方出了问题。
应该没人会看的丑代码
#include<bits/stdc++.h>
using namespace std;
struct pig {
int id;
char card[4001];
int num;
int lei_fan;
int tiao;
int tiao_zhong;
int tiao_fan;
int ti_li;
int dead;
int zhuang_bei;
};
pig a[21];
char card[3001];
int n,m;
int win;
int res=0;
int attact;
void print() {
if(win==0) puts("MP");
if(win==1) puts("FP");
for(int i=1; i<=n; i++) {
if(a[i].dead==1) puts("DEAD");
else {
for(int j=1; j<=a[i].num; j++) {
cout<<a[i].card[j]<<" ";
}
cout<<endl;
}
}
exit(0);
}
void read() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
string s;
cin>>s;
if(s=="MP") a[i].id=1;
if(s=="ZP") a[i].id=2;
if(s=="FP") a[i].id=3;
for(int j=1; j<=4; j++) cin>>a[i].card[j];
a[i].num=a[i].ti_li=4;
}
for(int i=1; i<=m; i++) cin>>card[i];
a[1].tiao=1;
}
int find_nxt(int s) {
int t=s+1;
if(t==n+1) t=1;
while(1) {
if(a[t].dead==0) return t;
t++;
if(t==n+1) t=1;
}
}
void get_card(int x) {
if(res==m) a[x].card[++a[x].num]=card[m];
else a[x].card[++a[x].num]=card[++res];
}
bool is_card(int x,char k) {
for(int i=1; i<=a[x].num; i++)
if(a[x].card[i]==k) return 1;
return 0;
}
int find_card(int x,char k) {
for(int i=1; i<=a[x].num; i++)
if(a[x].card[i]==k) return i;
return 0;
}
int ff;
void use_card(int x,int y) {
for(int i=y+1; i<=a[x].num; i++) a[x].card[i-1]=a[x].card[i];
a[x].num--;
}
int find_enemy(int x) {
int t=find_nxt(x);
while(1) {
if(t==x) return 0;
if(a[x].id==1&&(a[t].lei_fan==1||a[t].tiao_fan==1)) return t;
if(a[x].id==2&&a[t].tiao_fan==1) return t;
if(a[x].id==3&&(a[t].id==1||a[t].tiao_zhong==1)) return t;
t=find_nxt(t);
}
return 0;
}
void over() {
if(a[1].dead==1) win=1,print();
int t=0;
for(int i=2; i<=n; i++) {
if(a[i].dead==0&&a[i].id==3) {
t=1;
break;
}
}
if(t==0) win=0,print();
}
void jiang_li(int x,int y) {
if(a[x].id==1&&a[y].id==2) {
a[x].num=0;
a[x].zhuang_bei=0;
return ;
}
if(a[y].id==3) {
get_card(x);
get_card(x);
get_card(x);
}
}
void act(int x) {
get_card(x);
get_card(x);
int attack=0;
if(is_card(x,'P')&&a[x].ti_li<4) a[x].ti_li++,use_card(x,find_card(x,'P'));
if(is_card(x,'Z')) a[x].zhuang_bei|=1,use_card(x,find_card(x,'Z'));
attact=0;
while(is_card(x,'K')) {
int nxt=find_nxt(x),enemy=find_enemy(x);
if(enemy==0) break;
if(attact>=1&&a[x].zhuang_bei==0) break;
if(nxt==enemy) {
attact++;
use_card(x,find_card(x,'K'));
if(a[x].tiao==0) {
a[x].tiao=1;
if(a[nxt].id==1) a[x].tiao_fan=1;
if(a[nxt].tiao_zhong==1) a[x].tiao_fan=1;
if(a[nxt].tiao_fan==1) a[x].tiao_zhong=1;
}
if(is_card(nxt,'D')) use_card(nxt,find_card(nxt,'D'));
else {
a[nxt].ti_li--;
if(a[nxt].ti_li<=0) {
if(is_card(nxt,'P')) use_card(nxt,find_card(nxt,'P'));
else a[nxt].dead=1,over(),jiang_li(x,nxt);
}
}
} else break;
}
}
void game() {
int cnt=1;
while(1) {
act(cnt);
cnt=find_nxt(cnt);
}
}
int main() {
read();
game();
return 0;
}