尼玛!!我做完这道题整个人都不淡定了好不!!!!
题目大意:给定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; }