P1039侦探推理求调
  • 板块灌水区
  • 楼主Ultra_Limit
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/2/24 11:22
  • 上次更新2024/2/24 14:17:44
查看原帖
P1039侦探推理求调
1284065
Ultra_Limit楼主2024/2/24 11:22
#include<bits/stdc++.h>
#define _ 0
using namespace std;
string nam,guilty,zc[105],week[8],sb[105];
int n,m,p,said[105],xs,ren[105],ship[105];
bool error;
map<int,string>name;
void biao()
{
	week[1]="Today is Monday.";
	week[2]="Today is Tuesday.";
	week[3]="Today is Wednesday.";
	week[4]="Today is Thursday.";
	week[5]="Today is Friday.";
	week[6]="Today is Saturday.";
	week[7]="Today is Sunday.";
}
void set(int who,int yx)
{
    if(ship[who]&&ship[who]!=yx)
    {
        error=1;
    }
    else
    {
        ship[who]=yx;
    }
}
int main()
{
	int i,j,k,day,zh,jh,dd,ans=0;
	bool flag;
	cin>>n>>m>>p;
	biao();
	for(i=1;i<=n;i++)
	{
		cin>>nam;
		name[i]=nam;
	}
    char ch=getchar();
    while(ch==10)
    {
        ch=getchar();
        getchar();
    }
	for(i=1;i<=p;i++)
	{
		string ppp;
		getline(cin,zc[i]);
        zc[i].erase(zc[i].end()-1);
		for(k=0;k<zc[i].length();k++)
		{
			if(zc[i][k]!=':')
			{
			    ppp+=zc[i][k];
			}
			else
			{
			    break;
			}
		}
		for(j=1;j<=n;j++)
		{
			if(ppp==name[j])
			{
				ren[i]=j;
				break;
			}
		}
		for(k=ppp.length()+2;k<zc[i].length();k++)
		{
			sb[i]+=zc[i][k];
		}
		if(sb[i]=="I am guilty.")
		{
		    said[i]=1;
		}
		else
		{
			for (j=1;j<=7;j++)
			{
				if(sb[i]==week[j])
				{
					said[i]=2;
					break;
				}
			}
		}
		if(sb[i]=="I am not guilty.")
		{
		    said[i]=3;
		}
		else
		{
			for(j=1;j<=n;j++)
			{
				if(sb[i]==name[j]+" is guilty.")
				{
					said[i]=4;
					break;
				}
				else if(sb[i]==name[j]+" is not guilty.")
				{
					said[i]=5;
					break;
				}
			}
		}
	}
	for(day=1;day<=7;day++)
	{
		for(i=1;i<=n;i++)
		{
			error=false;
			jh=0;
			dd=0;
			memset(ship,0,sizeof(ship));
			for(j=1;j<=p&&!error;j++)
			{
				if(said[j]==1)
				{
					if(i==ren[j])
					{
					    set(ren[j],1);
					}
					else
					{
					    set(ren[j],-1);
					}
				}
                if(said[j]==2)
				{
					if(sb[j]==week[day])
					{
					    set(ren[j],1);
					}
					else
					{
					    set(ren[j],-1);
					}
				}
	            if(said[j]==3)
				{
					if(i!=ren[j])
					{
					    set(ren[j],1);
					}
					else
					{
					    set(ren[j],-1);
					}
				}
	            if(said[j]==4)
	            {
					for(k=1;k<=n;k++)
					{
						if(sb[j]==name[k]+" is guilty.")
						{
							if(k==i)
							{
							    set(ren[j],1);
							}
							else
							{
							    set(ren[j],-1);
							}
						}
					}
				}
				if(said[j]==5)
				{
					for(k=1; k<=n; k++)
					{
		                if(sb[j]==name[k]+" is not guilty.")
						{
							if(k!=i)
							{
							    set(ren[j],1);
							}
							else
							{
							    set(ren[j],-1);
							}
						}
					}
				}
	        }
			for(k=1;k<=n;k++)
			{
				if(ship[k]==-1)
				{
				    jh++;
				}
				else if(ship[k]==0)
				{
				    dd++;
				}
			}
			if(!error&&jh<=m&&m<=jh+dd)
			{
				if(xs&&xs!=i)
				{
					cout<<"Cannot Determine"<<endl;
					return 0;
				}
				else
				{
				    xs=i;
				}
			}
		}
	}
	if(!xs)
	{
	    cout<<"Impossible"<<endl;
	}
	else
	{
	    cout<<name[xs]<<endl;
	}
	return 0;
}

编译错误

2024/2/24 11:22
加载中...