FZU2202 犯罪嫌疑人

2021-07-28 06:44:15 字數 1314 閱讀 3526

problem 2202 犯罪嫌疑人

福爾摩斯是個大偵探,他總是在解決疑難案件。這一次的案件也不例外,案件是這樣的:有編號為1到n的n位嫌疑犯,他們其中有乙個犯了罪,然後每個嫌疑犯都被詢問,「哪乙個人犯了罪?」犯罪嫌疑人的答案只能「編號ai的嫌疑犯犯了罪」或者「編號ai的嫌疑犯沒有犯罪」。當然嫌疑犯也可以說他自己(ai = i).

福爾摩斯憑著他敏銳的偵探直覺,確定地對華生說,只有m個人說了真話,其餘人都是說謊。然後就沒有然後了,但華生卻想知道哪些人說謊哪些人又是講真話。這個時候同樣聰明的你,被譽為紅旗下的名偵探是否願意秀一下自己的偵探天賦,幫助可憐的華生嘛?

第一行乙個整數t(1 <= t <= 10),表示測試資料的組數。

每組資料第一行包含n(1 <= n <=10^5)和m(0 <= m <= n)兩個整數,含義見題面。接下來n行,第i行是乙個整數+ai或者-ai(1<= ai <= n),如果是+ai,代表第i個人說編號ai犯了罪,如果是-ai,則表示編號ai沒有犯罪。

輸入資料保證至少存在乙個人,使得如果是他犯了罪,則恰好有 m 個人說了真話。

輸出為n行,第i行是第i個嫌疑犯的輸出。如果第i個嫌疑犯說了是真話,輸出「truth」;如果說謊,則輸出「lie」,如果不確定,則輸出「not defined」。

23 2-1-2-34 1+2-3+4-1

not definednot definednot definedlienot definedlienot defined

foj有獎月賽-2023年10月

解題思路:假設i是犯人,則說真話的人數=說i是犯人的人數+(說某人不是犯人的人數-說i不是犯人的人數)

若i說x是犯人,x可能是犯人時,i說的可能是真話也可能是假話;x不可能是犯人時,i說的必為假話

若i說x不是犯人,x可能是犯人時,i說的可能是真話也可能是假話;x不可能是犯人時,i說的必為真話

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define ll long long

const int inf=0x3f3f3f3f;

int x[100010],a[100010],b[100010],f[100010];

int main()

}for(int i=1;i<=n;i++)

}if(cnt>1)

}else}}

return 0;

}

fzu2202犯罪嫌疑人 邏輯判斷

假設i是犯人,則說真話的人數 說i是犯人的人數 說某人不是犯人的人數 說i不是犯人的人數 若i說x是犯人,x可能是犯人時,i說的可能是真話也可能是假話 x不可能是犯人時,i說的必為假話 若i說x不是犯人,x可能是犯人時,i說的可能是真話也可能是假話 x不可能是犯人時,i說的必為真話 include ...

FZU2202 犯罪嫌疑人(邏輯推理 模擬)

福爾摩斯是個大偵探,他總是在解決疑難案件。這一次的案件也不例外,案件是這樣的 有編號為1到n的n位嫌疑犯,他們其中有乙個犯了罪,然後每個嫌疑犯都被詢問,哪乙個人犯了罪?犯罪嫌疑人的答案只能 編號ai的嫌疑犯犯了罪 或者 編號ai的嫌疑犯沒有犯罪 當然嫌疑犯也可以說他自己 ai i 福爾摩斯憑著他敏銳...

G FZU2022 犯罪嫌疑人

這道題題意很清楚,是推理題,主要靠思維,部分比較簡單。以下是解題思路 按照 順序編寫,可以對照著看 a i 表示第i個人被指控的次數,a i 表示地i個人被澄清的次數,suspect i 表示第i個人是否為嫌疑人,tmp記錄那個人的口供。現在假設第i個人是罪犯,則xx a i b b i 為所真話的...