我下载了第一个错误用例,测试得到结果是HELLO, 与给出的标准答案一致,不知道为什么是错的? 以下是我的代码。
#include<bits/stdc++.h>
using namespace std;
vector<string> get(string s){
vector<string>ans;
string t;
for(char c:s){
if(c==' '){
ans.push_back(t);
t = "";
}
else t.push_back(c);
}
ans.push_back(t);
if(!ans[0].empty())ans[0].pop_back();
return ans;
}
int main(){
int i,j,n,m,p;
scanf("%d%d%d",&m,&n,&p);
vector<string>name(m);
unordered_map<string,int>order;
unordered_map<string,int>week = {{"Monday.",0},{"Tuesday.",1},{"Wednesday.",2},{"Thursday.",3},{"Friday.",4},{"Saturday.",5},{"Sunday.",6}};
for(i=0;i<m;++i){
cin>>name[i];
order[name[i]] = i;
}
getchar();
vector<vector<string>>d(p);
string s;
for(i=0;i<p;++i){
getline(cin,s);
d[i] = get(s);
}
int cp = 0, fan = -1;
for(i=0;i<m;++i){
for(j=0;j<7;++j){
vector<int>sen(m);
bool flag = 0;
for(int k=0;k<p;++k){
if(d[k].size()==4&&order.count(d[k][0])&&d[k][1]=="I"&&d[k][2]=="am"&&d[k][3]=="guilty."){
if(order[d[k][0]]==i){
if(sen[i]==-1){
flag = 1;
break;
}
sen[i] = 1;
}
else if(sen[order[d[k][0]]]==1){flag = 1;break;}
else sen[order[d[k][0]]] = -1;
}
else if(d[k].size()==5&&order.count(d[k][0])&&d[k][1]=="I"&&d[k][2]=="am"&&d[k][3]=="not"&&d[k][4]=="guilty."){
if(order[d[k][0]]==i){
if(sen[i]==1){
flag = 1;
break;
}
sen[i] = -1;
}
else if(sen[order[d[k][0]]]==-1){flag = 1;break;}
else sen[order[d[k][0]]] = 1;
}
else if(d[k].size()==4&&order.count(d[k][0])&&order.count(d[k][1])&&d[k][2]=="is"&&d[k][3]=="guilty."){
if(order[d[k][1]]==i){
if(sen[order[d[k][0]]]==-1){
flag = 1;
break;
}
sen[order[d[k][0]]] = 1;
}
else if(sen[order[d[k][0]]]==1){flag = 1;break;}
else sen[order[d[k][0]]] = -1;
}
else if(d[k].size()==5&&order.count(d[k][0])&&order.count(d[k][1])&&d[k][2]=="is"&&d[k][3]=="not"&&d[k][4]=="guilty."){
if(order[d[k][1]]==i){
if(sen[order[d[k][0]]]==1){
flag = 1;
break;
}
sen[order[d[k][0]]] = -1;
}
else if(sen[order[d[k][0]]]==-1){flag = 1;break;}
else sen[order[d[k][0]]] = 1;
}
else if(d[k].size()==4&&order.count(d[k][0])&&d[k][1]=="Today"&&d[k][2]=="is"&&week.count(d[k][3])){
if(week[d[k][3]]==j){
if(sen[order[d[k][0]]]==-1){
flag = 1;
break;
}
sen[order[d[k][0]]] = 1;
}
else if(sen[order[d[k][0]]]==1){flag = 1;break;}
else sen[order[d[k][0]]] = -1;
}
}
if(flag)continue;
int c1 = 0, c2 = 0;
for(int k=0;k<m;++k){
if(sen[k]==-1)++c1;
else if(sen[k]==0)++c2;
}
if(c1<=n&&c1+c2>=n){
++cp;
fan = i;
break;
}
}
if(cp>1)break;
}
if(cp>1)puts("Cannot Determine");
else if(cp==0)puts("Impossible");
else cout << name[fan] <<endl;
return 0;
}
提供的错误输入用例为
2 2 4
HELLO
GUILTY
HELLO: What is your name?
GUILTY: I am GUILTY.
GUILTY: Are you guilty?
HELLO: I am not guilty.