输入数据 #1:
2 1 9
HELLO
GUILTY
HELLO: What is your name?
HELLO: Today is Friday.
HELLO: Today is Monday.
HELLO: Today is Tuesday.
HELLO: Today is Wednesday.
HELLO: Today is Saturday.
HELLO: Today is Sunday.
HELLO: Today is Thursday.
GUILTY: Are you guilty?
正确输出:Impossible
。
本地输出:Impossible
。
洛谷 IDE 输出:Impossible
。
洛谷评测输出:Cannot Determine
。
评测记录。
代码:
//Author: mairuisheng
//#pragma GCC optimize(3)
#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
inline int read()
{
int x=0,f=1;
char s;
s=getchar();
while(s<48||s>57)
{
if(s=='-')f=-f;
s=getchar();
}
while(s>47&&s<58)
{
x=(x<<3)+(x<<1)+s-48;
s=getchar();
}
return x*f;
}
constexpr int N=21;
struct Node
{
int opt;
string xxxxxx;
};
vector<Node> g[N];
unordered_map<string,int> id;
unordered_map<string,int> xq={{"Monday",1},{"Tuesday",2},{"Wednesday",3},{"Thursday",4},{"Friday",5},{"Saturday",6},{"Sunday",7}};
int tot;
int m,n,p;
string s3[N],sna[N];
int ans;
string anss;
bool Check(int per,int day)
{
int i,j,len,op;
int cnt=0;
string xxx;
int isl;
for(i=1;i<=m;++i)
{
len=g[i].size();
isl=-1;
for(j=0;j<len;++j)
{
op=g[i][j].opt;
xxx=g[i][j].xxxxxx;
if(op==1)
{
if(i==per)
{
if(isl==0)return false;
isl=1;
}
else
{
if(isl==1)return false;
isl=0;
}
}
else if(op==2)
{
if(i!=per)
{
if(isl==0)return false;
isl=1;
}
else
{
if(isl==1)return false;
isl=0;
}
}
else if(op==3)
{
if(id[xxx]==per)
{
if(isl==0)return false;
isl=1;
}
else
{
if(isl==1)return false;
isl=0;
}
}
else if(op==4)
{
if(id[xxx]!=per)
{
if(isl==0)return false;
isl=1;
}
else
{
if(isl==1)return false;
isl=0;
}
}
else
{
if(day==xq[xxx])
{
if(isl==0)return false;
isl=1;
}
else
{
if(isl==1)return false;
isl=0;
}
}
}
if(isl==0)++cnt;
}
return cnt==n;
}
int main()
{
m=read();
n=read();
p=read();
int i,j,lens,len,iid;
string s,s2;
for(i=1;i<=m;++i)
{
cin>>sna[i];
id[sna[i]]=++tot;
}
scanf("\n");
while(p--)
{
getline(cin,s);
lens=s.length();
s2="";
len=0;
for(i=0;i<lens;++i)
{
if(s[i]==':')
{
iid=id[s2];
s2="";
}
else if(s[i]==' ')
{
if(s2=="")continue;
s3[++len]=s2;
s2="";
}
else if(s[i]!='.')s2+=s[i];
}
if(s2!="")s3[++len]=s2;
if(len<3)continue;
if(s3[2]=="am")
{
if(s3[3]=="not")g[iid].push_back({2,""});
else g[iid].push_back({1,""});
}
else if(s3[2]=="is")
{
if(s3[3]=="guilty")g[iid].push_back({3,s3[1]});
else if(s3[3]=="not")g[iid].push_back({4,s3[1]});
else g[iid].push_back({5,s3[3]});
}
}
for(i=1;i<=m;++i)
{
for(j=1;j<8;++j)
{
if(Check(i,j))
{
anss=sna[i];
++ans;
break;
}
}
if(ans==2)
{
puts("Cannot Determine");
return 0;
}
}
if(ans==0)puts("Impossible");
else cout<<anss;
return 0;
}
真的不知道哪里出错了,求大佬解答。