社区讨论
萌新求助
P1039[NOIP 2003 提高组] 侦探推理参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi7z021s
- 此快照首次捕获于
- 2025/11/21 05:55 4 个月前
- 此快照最后确认于
- 2025/11/21 05:55 4 个月前
CPP
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int fake[25],err,w[205],nx;
string name[105],word[205];
string week[8]={"LiuZiJian","Today is Monday.","Today is Tuesday.","Today is Wenesday.","Today is Thursday.","Today is Friday.","Today is Saturday.","Today is Sunday."};
void modi(int who,int yx){(fake[who]&&fake[who]!=yx) ? err=1 : fake[who]=yx;}
int main(){
int n,m,p;scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=m;++i)cin>>name[i];
for(int i=1;i<=p;++i){
string nm;cin>>nm;nm.erase(nm.end()-1);
for(int j=1;j<=m;j++)if(name[j]==nm)w[i]=j;
getline(cin,word[i]);word[i].erase(word[i].begin());
}
for(int td=1;td<=7;td++)
for(int px=1;px<=m;px++){
err=0;memset(fake,0,sizeof(fake));
for(int i=1;i<=p;i++){
int who=w[i];
if(word[i]=="I am guilty.")modi(who,px==who?1:-1);
else if(word[i]=="I am not guilty.")modi(who,px!=who?1:-1);
for(int j=1;j<=7;j++)
if(word[i]==week[j])modi(who,j==td?1:-1);
for(int j=1;j<=m;j++){
if(word[i]==name[j]+" is guilty.")modi(who,j==px?1:-1);
if(word[i]==name[j]+" is not guilty.")modi(who,j!=px?1:-1);
}
}
int cnt=0,trh=0;
for(int i=1;i<=m;i++){if(fake[i]==-1)cnt++;if(fake[i]==0)trh++;}
if(err==0&&cnt<=n&&cnt+trh>=n){
if(nx&&(nx!=px)){puts("Cannot Determine");return 0;}
else nx = px;
}
}
if(!nx) puts("Impossible");
else puts(name[nx].c_str());
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...