为什么拿不了10pts
查看原帖
为什么拿不了10pts
510360
HbugU楼主2022/6/28 12:59
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define fr first
#define se second
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
int n,m,fz,s=1;
bool ed;
char pd[2005],last;
/*
基本牌 
    P:桃 
    K:杀
    D:闪
锦囊牌  
    F:决斗 
    N:南猪入侵 
    W:万箭齐发 
    J:无懈可击
装备牌 
    Z:猪葛连弩
*/ 
struct node{//猪的结构体 
	char id,a[2005];
	int cnt,pre,next,tl;
	bool zb;
}pig[15];
char uid[15];
void init(){//初始化 
	cin>>n>>m;
	char s[15];
	for(int i=1;i<=n;i++){
		for(int j=0;j<=2004;j++){
			pig[i].a[j]='@';
		}
		uid[i]='?';
		pig[i].next=i+1;
		pig[i].pre=i-1;
	}
	pig[n].next=1;
	pig[1].pre=n;//距离&手牌 
	for(int i=1;i<=n;i++){
		pig[i].tl=4;
		cin>>s;
		pig[i].id=s[0];
		if(pig[i].id='M') uid[i]='M';
		for(int u=1;u<=4;u++){
			cin>>s;
			pig[i].a[++pig[i].cnt]=s[0];
		}
	}
	for(int i=1;i<=m;i++){
		cin>>s;
		pd[i]=s[0];
	}
	last=pd[m];
}
void mp(int v){//摸排 
	if(m==s) pig[v].a[++pig[v].cnt]=last;
	pig[v].a[++pig[v].cnt]=pd[s++];
}
void die(int x,int y){//死亡处理,x-杀人者,y-死亡者 
	for(int j=1;j<=pig[y].cnt;j++){
		if(pig[y].a[j]=='P'){
			pig[y].a[j]='@';
			pig[y].tl=1;
			return; 
		}
	} 
	pig[pig[y].pre].next=pig[y].next;
	pig[pig[y].next].pre=pig[y].pre;
	if(pig[y].id=='M'){
		cout<<"FP\n";
		ed=1;
		return;
	}
	if(pig[y].id=='F'){
		fz--;
		if(fz==0){
			cout<<"MP\n";
			ed=1;
			return;
		}
		for(int i=1;i<=3;i++) mp(x);
	}
	if(pig[y].id=='Z'&&pig[x].id=='M'){
		for(int i=1;i<=pig[x].cnt;i++){
			pig[x].a[i]='@';
		}
		pig[x].zb=0;
	}
}
bool K(int x,int y){//杀,x-出杀者,y-被杀者 
	if(pig[x].id=='M'){
		if(uid[y]=='F'||uid[y]=='L'){
			for(int i=1;i<=pig[y].cnt;i++){
				if(pig[y].a[i]=='D'){
					pig[y].a[i]='@';
					return 1;
				}
			}
			pig[y].tl--;
			return 1;
		}
		else return 0;
	}
	if(pig[x].id=='Z'){
		if(uid[y]=='F'){
			for(int i=1;i<=pig[y].cnt;i++){
				if(pig[y].a[i]=='D'){
					pig[y].a[i]='@';
					return 1;
				}
			}
			pig[y].tl--;
			uid[x]='Z';
			return 1;
		}
		else return 0;
	}
	if(pig[x].id=='F'){
		if(uid[y]=='Z'||uid[y]=='M'){
			for(int i=1;i<=pig[y].cnt;i++){
				if(pig[y].a[i]=='D'){
					pig[y].a[i]='@';
					return 1;
				}
			}
			pig[y].tl--;
			uid[x]='F';
			return 1;
		}
		else return 0;
	}
}
void play(){//game 
	int t=1;
	while(t++){
		int i=t%n;
		if(i==0) i=n;
		bool k=0;
		for(int j=1;j<=pig[i].cnt;j++){
			if(pig[i].a[j]=='K'){
				pig[i].a[j]='@';
				k=K(i,pig[i].next);
				die(i,pig[i].next);
				if(ed) return;
				if(pig[i].zb==1) k=1;
			}
			if(pig[i].a[j]=='P'){
				pig[i].a[j]='@';
				pig[i].tl++;
			}
			if(pig[i].a[j]=='Z'){
				pig[i].a[j]='@';
				pig[i].zb=1;
				k=0;
				j=1;
			}
		}
	}
}
void print(){
	for(int i=1;i<n;i++){
		if(pig[i].tl==0){
			cout<<"DEAD\n";
		}
		else{
			bool have=0;
			for(int j=1;j<=pig[i].cnt;j++){
				if(pig[i].a[j]!='@'){
					have=1;
					break;
				}
			}
			if(have){
				cout<<" "<<"\n";
			}
			else{
				for(int j=1;j<=pig[i].cnt;i++){
					if(pig[i].a[j]!='@'){
						cout<<pig[i].a[j];
					}
					if(j==pig[i].cnt){
						cout<<"\n";
					}
					else{
						cout<<" ";
					}
				}
			}
		}
	}
}
int main(){
	init();
	play();
	print();
	return  0;
}
2022/6/28 12:59
加载中...