演算法訓練 審美課

2021-09-11 15:34:07 字數 1230 閱讀 4138

問題描述

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

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

輸入格式

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

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

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

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

輸出格式

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

樣例輸入

3 21 0

0 11 0

樣例輸出

2樣例說明

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

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

所以答案是2。

資料規模和約定

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

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

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

題解:可將每個同學的觀點用乙個最大20長度的01二進位制數表達出來,最重要的就是優化比較了。《強調:暴力比較是會超時的》 所以需要用別的辦法,辦法如下:

1,用二進位制將每個同學的觀點表達出來,因為該二進位制數唯一,所以可以換算成int型別的數。

2,在如map,vecter等容器內既儲存觀點又儲存該觀點出現的次數。前者在first裡後者在second裡。

3,因為map內根據key值直接從小到大排序好了。所以可以讓它裡面的key值小於mid時退出迴圈,其中maxn=pow(2,m)-1,mid=maxn/2。

4,對兒數的計算是觀點出現的次數乘上觀點的補數出現的次數**中可觀察到。

#include#include#include#includeusing namespace std;

mapa;

int main()

a[num]++;

} int maxn=pow(2,m)-1,sum=0;

map::iterator it=a.begin();

for(;it!=a.end();it++)

cout

}

演算法訓練 審美課

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

演算法訓練 審美課

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

演算法訓練 審美課

題目描述 給定n個含m個0 1的數字出串,判斷其中按位與為0的對數。注意點 使用string中 運算時,耗費時間非常巨大 第乙個 ac,第二個差乙個資料點,超時 改了很多地方,最後結果就是出在 號上。include include include include include include in...