尼玛!!我做完这道题整个人都不淡定了好不!!!!
题目大意:给定m个人,其中n个人在说谎,给出这m个人的p句话,找出凶手
我不是来发题解的!这题就是水题!我是来吐槽数据的!!!!
首先让我们来看这句话。
我、我。。。
这只是噩梦的开始。我们来看样例
其实这样例很正常不是么?其实如果我们1A了这道题,那么一切就结束了。可是呢?当我们心烦意乱地打开数据的时候,我们愁云不展的浓眉就会立刻变成捧腹巨笑——
input0.txt
很好,很好,两个逗比。但是我们还不要急着笑,我们来看下一组。
可怜的H君 当ABCDEFG相继指责着他们的下家时,深爱着I君的H君不忍心坑害他的恋人,于是忍着被怀疑为凶手的危险,向I君发出了最后的爱的轻语,却殊不知杀人真凶却是他最爱的那个小I。。。
等等我是不是看到了什么?
嘛嘛我们再来看这组。
Am I???
Am I???
Am I???
然后。。。你看到guity了么??你看到guity了么?这是个什么单词?我不认识他!!Do I??Do I???
双重否定句!!高大上!!高大上啊有木有!!
这题中的嫌疑人也是各种神经病
神经病的凶手
神经病的父母
神经病的出题人
最后我们这些做题人也变成神经病了有木有啊啊啊啊啊啊啊啊啊!!!!!
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 啊啊啊啊啊啊啊!!!!!
按照惯例,我现在应该贴代码了。不,我偏不。在这篇文章的最后,我要献上指尖流淌的一段文字,来表述我最后的真情
曾经有一段真挚的爱情放在我面前,我却没有珍惜。等到失去了以后,才追悔莫及。人世间最痛苦的事莫过于此。如果上天能给我一个再来一次的机会,我会对那个女孩子说,I love you!If there must be a deadline,I hope it is 10000 years!!!
Merry Teachers' Day !!! And Happy New Year !!! Wish You A Healthy Body ! We'd Meet Again Someday !! Good Bye !! Nyan-hahahahahah !!!!
#include<map>
#include<string>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
map <string,int> a;
int m,n,p,cnt;
char s[1000];
int master[21];
string names[21];
string sentences[21];
const string days[7]={
"Today is Monday.",
"Today is Tuesday.",
"Today is Wednesday.",
"Today is Thursday.",
"Today is Friday.",
"Today is Saturday.",
"Today is Sunday."
};
int ans,true_or_false[21],num[2];
bool Set_True_Or_False(int x,bool flag)
{
if(true_or_false[x]==-1)
true_or_false[x]=flag,num[flag]++;
else if(true_or_false[x]==flag)
return 0;
else return 1;
if(num[0]>n||num[1]>m-n)
return 1;
return 0;
}
void Judge(int x,string y)
{
int i,pos,suspect;
memset(true_or_false,0xff,sizeof true_or_false);
num[0]=num[1]=0;
for(i=1;i<=p;i++)
{
if(sentences[i]=="I am guilty.")
{
if(master[i]==x){
if( Set_True_Or_False(master[i],true) )
return ;
}else{
if( Set_True_Or_False(master[i],false) )
return ;
}
}
else if(sentences[i]=="I am not guilty.")
{
if(master[i]==x){
if( Set_True_Or_False(master[i],false) )
return ;
}else{
if( Set_True_Or_False(master[i],true) )
return ;
}
}
else if( pos=sentences[i].find(" is guilty"),~pos )
{
sentences[i].erase(pos,11);
if(suspect=a[sentences[i]])
{
if(suspect==x){
if( Set_True_Or_False(master[i],true) )
{
sentences[i].insert(pos," is guilty.");
return ;
}
}else{
if( Set_True_Or_False(master[i],false) )
{
sentences[i].insert(pos," is guilty.");
return ;
}
}
}
sentences[i].insert(pos," is guilty.");
}
else if( pos=sentences[i].find(" is not guilty"),~pos )
{
sentences[i].erase(pos,15);
if(suspect=a[sentences[i]])
{
if(suspect==x){
if( Set_True_Or_False(master[i],false) )
{
sentences[i].insert(pos," is not guilty.");
return ;
}
}else{
if( Set_True_Or_False(master[i],true) )
{
sentences[i].insert(pos," is not guilty.");
return ;
}
}
}
sentences[i].insert(pos," is not guilty.");
}
else if( pos=sentences[i].find("Today is "),~pos )
{
if(sentences[i]==y){
if( Set_True_Or_False(master[i],true) )
return ;
}else{
if( Set_True_Or_False(master[i],false) )
return ;
}
}
}
if(ans&&ans!=x)
{
puts("Cannot Determine");
exit(0);
}
ans=x;
}
int main()
{
int i,j;
cin>>m>>n>>p;
gets(s);
for(i=1;i<=m;i++)
names[i]=gets(s),
a[ names[i] ]=++cnt;
for(i=1;i<=p;i++)
{
scanf("%s",s);
s[strlen(s)-1]=0;
master[i]=a[(string)s];
getchar();
sentences[i]=gets(s);
}
for(i=1;i<=m;i++)
for(j=0;j<7;j++)
Judge(i,days[j]);
if(!ans)
puts("Impossible");
else
cout<<names[ans]<<endl;
}