想拿到 10pts,但是数据点1不知道为什么最后都多了很多的K(前面全对)
查看原帖
想拿到 10pts,但是数据点1不知道为什么最后都多了很多的K(前面全对)
175011
rfsfreffr楼主2022/7/15 18:55

通过对比后发现,我的输出相比标准输出最后多了很多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;
}
2022/7/15 18:55
加载中...