只有20分,求调
查看原帖
只有20分,求调
686471
Lan_yan楼主2023/11/22 17:05
#include<bits/stdc++.h>
using namespace std;
int num[25],rub[105];
int n,m,p,wer=0,tf[21];
string name[21];
string bish[105],ans[21];
void dat(int x,int y)
{
	int i,j,t=0,f=0;
	for(i=0;i<p;i++)
	{
		int flag;
		if(bish[i]=="Today is Monday.")
		{
			if(y==1)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		if(bish[i]=="Today is Tuesday.")
		{
			if(y==2)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		if(bish[i]=="Today is Wednesday.")
		{
			if(y==3)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		if(bish[i]=="Today is Thursday.")
		{
			if(y==4)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		if(bish[i]=="Today is Friday.")
		{
			if(y==5)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		if(bish[i]=="Today is Saturday.")
		{
			if(y==6)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		if(bish[i]=="Today is Sunday.")
		{
			if(y==7)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		if(bish[i]=="I am guilty.")
		{
			if(rub[i]==x)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		if(bish[i]=="I am not guilty.")
		{
			if(rub[i]!=x)
			{
				flag=1;t++;
			}
			else
			{
				flag=0;f++;
			}
			if(tf[rub[i]]==-1)tf[rub[i]]=flag;
			if(tf[rub[i]]!=flag)return;
		}
		for(j=0;j<n;j++)
		{
			string d=name[j]+"is guilty.";
			if(d==bish[i])
			{
				if(j==x)
				{
					flag=1;t++;
				}
				else
				{
					flag=0;f++;
				}
				if(tf[rub[i]]==-1)tf[rub[i]]=flag;
				if(tf[rub[i]]!=flag)return;
			}
		}
		for(j=0;j<n;j++)
		{
			string d=name[j]+"is not guilty.";
			if(d==bish[i])
			{
				if(j!=x)
				{
					flag=1;t++;
				}
				else
				{
					flag=0;f++;
				}
				if(tf[rub[i]]==-1)tf[rub[i]]=flag;
				if(tf[rub[i]]!=flag)return;
			}
		}
	}
	if(f>n||f<n)return;
	ans[wer++]=name[x];
}
int main()
{
	int i,j;
	scanf("%d%d%d",&m,&n,&p);
	for(i=0;i<m;i++)cin>>name[i];
	for(i=0;i<p;i++)
	{
		string x,y;
		cin>>x;
		x.erase(x.length()-1,1);
		for(j=0;j<m;j++)
		{
			if(name[j]==x)rub[i]=j;
		}
		getline(cin,y);
		y.erase(0,1);
		if(y[y.length()-1]=='\n'||y[y.length()-1]=='\r')
		{
			y.erase(y.length()-1,1);
		}
		bish[i]=y;
	}
	for(i=0;i<m;i++)
	{
		for(j=1;j<=7;j++)
		{
			memset(tf,-1,sizeof(tf));
			dat(i,j);
		}
	}
	if(wer<1)printf("Impossible");
	if(wer>1)printf("Cannot Determine");
	if(wer==1)cout<<ans[0];
	return 0;
}

有点丑,大佬勿喷

模仿题解思路做的

2023/11/22 17:05
加载中...