p1106偵探推理
accepted
標籤:字串
模擬noip提高組2003
明明同學最近迷上了偵探漫畫《柯南》並沉醉於推理遊戲之中,於是他召集了一群同學玩推理遊戲。遊戲的內容是這樣的,明明的同學們先商量好由其中的乙個人充當罪犯(在明明不知情的情況下),明明的任務就是找出這個罪犯。接著,明明逐個詢問每乙個同學,被詢問者可能會說:
證詞中出現的其他話,都不列入邏輯推理的內容。
明明所知道的是,他的同學中有n個人始終說假話,其餘的人始終說真。
現在,明明需要你幫助他從他同學的話中推斷出誰是真正的**,請記住,**只有乙個!
輸入由若干行組成,第一行有二個整數,m(1≤m≤20)、n(1≤n≤m)和p(1≤p≤100);m是參加遊戲的明明的同學數,n是其中始終說謊的人數,p是證言的總數。接下來m行,每行是明明的乙個同學的名字(英文本母組成,沒有主格,全部大寫)。往後有p行,每行開始是某個同學的名宇,緊跟著乙個冒號和乙個空格,後面是一句證詞,符合前表中所列格式。證詞每行不會超過250個字元。
輸入中不會出現連續的兩個空格,而且每行開頭和結尾也沒有空格。
如果你的程式能確定誰是罪犯,則輸出他的名字;如果程式判斷出不止乙個人可能是罪犯,則輸出 cannot determine;如果程式判斷出沒有人可能成為罪犯,則輸出 impossible。
3 1 5mike
charles
kate
mike:i am guilty.
mike:today is sunday.
charles:mike is guilty.
kate:i am guilty.
kate:how are you??
每個測試點1smike
有說一句話的末尾無空格的麼?..
noip2003第二題
解析:直接列舉**是誰,今天星期幾,然後判斷是否合法即可。根據合法的情況數,得到答案。
**:
#include#include#include#define max_m 20
#define max_p 100
#define max_len 250
using namespace std;
int m,n;
char name[max_m+20][max_len+20];
struct tnodeperson[max_m+20];
char zy[5][30]=;
char day[8][20]=;
int lz[5]=;
int ld[8]=;
int ln[max_m+20];
bool used[max_m+20],f[max_m+20];
bool jia[max_m+20];
void readdata()
//check 1
if(strncmp(zy[1],s+l,lz[1])==0)
//注意有人叫 today 的情況
//check 4
if(strncmp(zy[4],s+l,lz[4])==0)
}for(;rm)continue;
l=r+1;
//check 2
if(strncmp(s+l,zy[2],lz[2])==0)
//check 3
if(strncmp(s+l,zy[3],lz[3])==0)
}}int get(int xx,int yy)
if(person[i].xq!=0 && person[i].xq!=yy)
if(person[i].y[xx])
jia[i]=1,sum++;
}for(i=1;i<=m;i++)if(jia[i])
return sum;
}void work()
ans=i;
break; }}
if(ans==0)printf("impossible\n");
else printf("%s\n",name[ans]);
}int main()
NOIP2003 偵探推理
題二 偵探推理 問題描述 明明同學最近迷上了偵探漫畫 柯南 並沉醉於推理遊戲之中,於是他召集了一群同學玩推理遊戲。遊戲的內容是這樣的,明明的同學們先商量好由其中的乙個人充當罪犯 在明明不知情的情況下 明明的任務就是找出這個罪犯。接著,明明逐個詢問每乙個同學,被詢問者可能會說 證詞中出現的其他話,都不...
學習筆記 NOIP 字串
題目鏈結 考慮預處理出所有回文半徑為 i 的回文串個數 cnt i manacher 時進行乙個字首加,差分 字首和處理即可。記錄 題目鏈結 回文串計數。核心思想 記錄 題目鏈結 考慮回文串 s 的回文重心 pos 其在 s 中的回文半徑一定能將其延伸到 s 最後乙個位置。那麼問題等價於找到回文半徑...
NOIP模擬 字串(字尾陣列)
給定兩個字串 s1 和 s2 兩個字串都由 26 個小寫字母中的部分字母構成。現在需要統計 s 2 在 s 1 中出現了的次數。對於 s1 中的每個位置 i 設 st rlen s2 m,若 j 1m s1 i j 1 s 2 j k 最外層中括號為布林表示式 則認為 s2 在 s1 的 i 處出現...