演算法訓練 審美課

2021-09-26 22:30:10 字數 1450 閱讀 9592

《審美的歷程》課上有n位學生,帥老師展示了m幅畫,其中有些是梵谷的作品,另外的都出自五歲小朋友之手。老師請同學們分辨哪些畫的作者是梵谷,但是老師自己並沒有答案;因為這些畫看上去都像是小朋友畫的……老師只想知道,有多少對同學給出的答案完全相反,這樣他就可以用這個資料去揭穿披著皇帝新衣的抽象藝術了(支援帥老師_)。

答案完全相反是指對每一幅畫的判斷都相反。

第一行兩個數n和m,表示學生數和圖畫數;

接下來是乙個n*m的01矩陣a:

如果aij=0,表示學生i覺得第j幅畫是小朋友畫的;

如果aij=1,表示學生i覺得第j幅畫是梵谷畫的。

輸出乙個數ans:表示有多少對同學的答案完全相反。

3 21 0

0 11 0

同學1和同學2的答案完全相反;

同學2和同學3的答案完全相反;

所以答案是2。

對於50%的資料:n<=1000;

對於80%的資料:n<=10000;

對於100%的資料:n<=50000,m<=20。

將輸入的0和1轉換為二進位制,用a陣列來儲存每一行的數,a[i]表示第i行的值,sum[i]表示結果為i的個數,比如說sum[4]=8,結果為4有8個。 a陣列的i表示每一行,所以它的大小大概為5000,sum陣列的i表示結果,因為m<=20,所以它的大小根據2^20=1048576預估

按行遍歷,按位取反,與取反後的答案相同的就是題目要求的完全相反的答案。

最後sum/2是因為重複計算了,除以2之後才是「有多少對同學」,我有想起了握手問題//醉了。

用二進位制的方法進行儲存, a[i]=(a[i]<<1)+temp;這個式子要小本本和小腦袋記下~

for

(int i=

0;i) sum[a[i]]++

;}

新學的乙個按位取反操作,任何數和與它長度相同的全為1的二進位制數進行異或操作

int media=(1

<;int total=0;

for(

int i=

0;i)

#include

#include

//#include

using namespace std;

int n,m;

int a[

50010

],sum[

2000000];

intmain()

sum[a[i]]++

;}int media=(1

<;int total=0;

for(

int i=

0;i)printf

("%d"

,total/2)

;return0;

}

演算法訓練 審美課

問題描述 審美的歷程 課上有n位學生,帥老師展示了m幅畫,其中有些是梵谷的作品,另外的都出自五歲小朋友之手。老師請同學們分辨哪些畫的作者是梵谷,但是老師自己並沒有答案,因為這些畫看上去都像是小朋友畫的 老師只想知道,有多少對同學給出的答案完全相反,這樣他就可以用這個資料去揭穿披著皇帝新衣的抽象藝術了...

演算法訓練 審美課

時間限制 1.0s 記憶體限制 256.0mb 審美的歷程 課上有n位學生,帥老師展示了m幅畫,其中有些是梵谷的作品,另外的都出自五歲小朋友之手。老師請同學們分辨哪些畫的作者是梵谷,但是老師自己並沒有答案,因為這些畫看上去都像是小朋友畫的 老師只想知道,有多少對同學給出的答案完全相反,這樣他就可以用...

演算法訓練 審美課

問題描述 審美的歷程 課上有n位學生,帥老師展示了m幅畫,其中有些是梵谷的作品,另外的都出自五歲小朋友之手。老師請同學們分辨哪些畫的作者是梵谷,但是老師自己並沒有答案,因為這些畫看上去都像是小朋友畫的 老師只想知道,有多少對同學給出的答案完全相反,這樣他就可以用這個資料去揭穿披著皇帝新衣的抽象藝術了...