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