求调,21个TLE+2个WA,一分不得
查看原帖
求调,21个TLE+2个WA,一分不得
1300710
yuxusheng楼主2024/5/9 09:20
#include <bits/stdc++.h>
using namespace std;	
struct player
{
	string actor;//身份 
	char armor;
	int hp, sha, shan, tao, nanman, wanjian, zhuge, wuxie, juedou;
	string record;
	string known[100];
	bool alive;
}p[100];
int n, card, fnum, now, cnow = 1;
char a[100];
void solve(char c, int i)
{
	if(c == 'K')p[i].sha++;
	else if(c == 'D')p[i].shan++;
	else if(c == 'P')p[i].tao++;
	else if(c == 'N')p[i].nanman++;
	else if(c == 'W')p[i].wanjian++;
	else if(c == 'J')p[i].wuxie++;
	else if(c == 'Z')p[i].zhuge++;
	else if(c == 'F')p[i].juedou++;
	p[i].record += c;
}
void zero(int i)
{
	p[i].armor = '#';
	p[i].sha = 0;
	p[i].shan = 0;
	p[i].tao = 0;
	p[i].nanman = 0;
	p[i].wanjian = 0;
	p[i].zhuge = 0;
	p[i].wuxie = 0;
	p[i].juedou = 0;
}

void willdie(int i)
{
	for(int j = 1; j <= n; j++)
	{
		if(i == j && p[i].tao != 0)
		{
			p[i].tao--;
			p[i].hp++;
		}
		else if(p[i].actor == "MP" && p[j].actor == "ZP")
		{
			p[j].tao--;
			p[i].hp++;
			for(int k = 1; k <= n; k++)
			{
				p[k].known[now] = "ZP";
			}
		}
		else if(p[j].known[i] == "FP" && p[j].actor == "FP")
		{
			p[j].tao--;
			p[i].hp++;
			for(int k = 1; k <= n; k++)
			{
				p[k].known[j] = "FP";
			}
		}
	}
	if(p[i].hp == 0)
	{
		p[i].alive = 0;
		if(p[i].actor == "ZP")zero(now);
		else
		{
			solve(a[cnow], now);
			if(cnow != n)cnow++;
			solve(a[cnow], now);
			if(cnow != n)cnow++;
			solve(a[cnow], now);
			if(cnow != n)cnow++;
		}
	}
}
int main()
{
	cin >> n >> card;
	now = 1;
	for(int i = 1; i <= n; i++) 
	{
		cin >> p[i].actor;
		if(p[i].actor == "FP")fnum++;
		for(int j = 1; j <= 4; j++)
		{
			char c;
			cin >> c;
			solve(c, i);
			p[i].record += c;
		}
		p[i].alive = 1;
		p[i].hp = 4;
		p[i].armor = '#';
	}
	for(int i = 1; i <= card; i++)
	{
		char cc;
		cin >> cc;
		a[i] = cc;
	}
	for(int i = 1; i <= n; i++)p[i].known[1] = "MP";
	
	while(fnum != 0 && p[1].alive)
	{
		if(p[now].alive == 0)
		{
			if(now == n)now = 1;
			else now++;
			continue;
		}
		solve(a[cnow], now);//摸牌 
		if(cnow != n)cnow++;
		solve(a[cnow], now);
		if(cnow != n)cnow++;
		
		int prev, next;//设置前一人和后一人 
		if(now == 1)prev = n;
		else prev = now - 1;
		while(p[prev].alive == 0)
		{
			if(now == 1)prev = n;
			else prev = now - 1;
		}
		if(now == n)next = 1;
		else next = now + 1;
		while(p[next].alive == 0)
		{
			if(now == n)next = 1;
			else next = now + 1;			
		}
		
		if(p[now].zhuge != 0)//装装备 吃桃 
		{
			while(p[now].zhuge != 0)
			{
				p[now].armor = 'Z';
				p[now].zhuge--;
			}
		}
		while(p[now].hp < 4 && p[now].tao != 0)
		{
			p[now].hp++;
			p[now].tao--;
		}
		
		if(p[now].actor == "MP")//主公 
		{
			if(p[now].nanman != 0)//使用南蛮 
			{
				p[now].nanman--;
				while(p[now].nanman != 0)
				{
					for(int i = 1; i < now; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].sha != 0)p[i].sha--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
					for(int i = now + 1; i <= n; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].sha != 0)p[i].sha--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
				}
				while(p[now].wanjian != 0)
				{
					p[now].wanjian--;
					for(int i = 1; i < now; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].shan != 0)p[i].shan--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
					for(int i = now + 1; i <= n; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].shan != 0)p[i].shan--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
				}
			}
			int limit = 1;
			if(p[now].armor == 'Z')limit = 999999;
			if(p[now].known[next] == "FP")
			{
				while(limit && p[now].sha)
				{
					p[now].sha--;
					limit--;
					if(p[next].shan != 0)p[next].shan--;
					else p[next].hp--;
					if(p[next].hp == 0)willdie(next);
				}
			}
			if(p[now].known[prev] == "FP")
			{
				while(limit && p[now].sha)
				{
					p[now].sha--;
					limit--;
					if(p[prev].shan != 0)p[prev].shan--;
					else p[prev].hp--;
					if(p[prev].hp == 0)willdie(prev);
				}
			}
		}
		
		if(p[now].actor == "ZP")//忠臣
		{
			if(p[now].nanman != 0)//使用南蛮 
			{
				p[now].nanman--;
				while(p[now].nanman != 0)
				{
					for(int i = 1; i < now; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].sha != 0)p[i].sha--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
					for(int i = now + 1; i <= n; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].sha != 0)p[i].sha--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
				}
				while(p[now].wanjian != 0)
				{
					p[now].wanjian--;
					for(int i = 1; i < now; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].shan != 0)p[i].shan--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
					for(int i = now + 1; i <= n; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].shan != 0)p[i].shan--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
				}
			}
			int limit = 1;
			if(p[now].armor == 'Z')limit = 999999;
			if(p[now].known[next] == "FP")
			{
				while(limit && p[now].sha)
				{
					p[now].sha--;
					limit--;
					if(p[next].shan != 0)p[next].shan--;
					else p[next].hp--;
					if(p[next].hp == 0)willdie(next);
				}
			}
			if(p[now].known[prev] == "FP")
			{
				while(limit && p[now].sha)
				{
					p[now].sha--;
					limit--;
					if(p[prev].shan != 0)p[prev].shan--;
					else p[prev].hp--;
					if(p[prev].hp == 0)willdie(prev);
				}
			}
		}
		
		if(p[now].actor == "FP")//反贼
		{
			if(p[now].nanman != 0)//使用南蛮 
			{
				p[now].nanman--;
				while(p[now].nanman != 0)
				{
					for(int i = 1; i < now; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].sha != 0)p[i].sha--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
					for(int i = now + 1; i <= n; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].sha != 0)p[i].sha--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
				}
				while(p[now].wanjian != 0)
				{
					p[now].wanjian--;
					for(int i = 1; i < now; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].shan != 0)p[i].shan--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
					for(int i = now + 1; i <= n; i++)
					{
						if(p[i].alive == 0)continue;
						bool need = 1;
						for(int j = 1; j <= n; j++)
						{
							if(p[j].alive == 1)
							{
								if(p[j].known[i] == "FP" && p[j].actor == "FP")
								{
									p[j].wuxie--;
									need = 0;
									for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
								}
							}
						}
						if(need)
						{
							if(p[i].shan != 0)p[i].shan--;
							else p[i].hp--;
							if(p[i].hp == 0)
							{
								willdie(i);
							}
						}
					}
				}
			}
			int limit = 1, hurt = 0;
			if(p[now].armor == 'Z')limit = 999999;
			if(p[prev].actor == "MP")hurt = prev;
			else if(p[next].actor == "MP")hurt = next;
			else if(p[next].actor == "ZP")hurt = next;
			else if(p[prev].actor == "ZP")hurt = prev;
			
			if(hurt)
			{
				while(limit && p[now].sha)
				{
					p[now].sha--;
					limit--;
					if(p[hurt].shan != 0)p[hurt].shan--;
					else p[hurt].hp--;
					if(p[hurt].hp == 0)willdie(hurt);
				}
			}
		}
	}
	if(p[1].alive == 0)
	{
		cout << "FP\n";
	}
	else cout << "MP\n";
	for(int i = 1; i <= n; i++)
	{
		if(p[i].alive == 1)
		{
			for(int j = 0; j < p[i].record.size(); j++)
			{
				if(p[i].record[j] == 'K' && p[i].sha)
				{
					p[i].sha--;
					cout << p[i].record[j] << " ";
				}
				else if(p[i].record[j] == 'D' && p[i].shan)
				{
					p[i].shan--;
					cout << p[i].record[j] << " ";
				}				
				else if(p[i].record[j] == 'P' && p[i].tao)
				{
					p[i].tao--;
					cout << p[i].record[j] << " ";
				}
				else if(p[i].record[j] == 'N' && p[i].nanman)
				{
					p[i].nanman--;
					cout << p[i].record[j] << " ";
				}
				else if(p[i].record[j] == 'W' && p[i].wanjian)
				{
					p[i].wanjian--;
					cout << p[i].record[j] << " ";
				}
				else if(p[i].record[j] == 'J' && p[i].wuxie)
				{
					p[i].wuxie--;
					cout << p[i].record[j] << " ";
				}
				else if(p[i].record[j] == 'Z' && p[i].zhuge)
				{
					p[i].zhuge--;
					cout << p[i].record[j] << " ";
				}
				else if(p[i].record[j] == 'F' && p[i].juedou)
				{
					p[i].juedou--;
					cout << p[i].record[j] << " ";
				}
			}
		}
		else cout << "DEAD";
		cout << endl;
	}
	
	return 0;
}
2024/5/9 09:20
加载中...