藍橋杯練習 演算法訓練

2021-09-12 17:24:06 字數 1758 閱讀 2654

演算法訓練 審美課  

時間限制:1.0s   記憶體限制:256.0mb

問題描述

《審美的歷程》課上有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。

開始的想法是轉化成字串,然後比較,但是n^2複雜度過不去的。 

二進位製取反:

將每個學生的答案用陣列a[i]以二進位制的形式儲存。故答案相同的學生陣列a[i]存的值是相同的。

陣列ans[ a[i] ]用於儲存每種答案的人數。例如,假設ans[3]=10,即有10個人答案相同且答案都為3 (十進位制3對應的二進位制為011)。

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

最後sum/2是因為重複計算了,除以2之後才是「有多少對同學」。

#include#includeusing namespace std;

int a[50005];

int b[2000000];//最大2^20-1

int main()

b[a[i]]++;

} int max = (1《問題描述

給定乙個序列,每次詢問序列中第l個數到第r個數中第k大的數是哪個。

輸入格式

第一行包含乙個數n,表示序列長度。

第二行包含n個正整數,表示給定的序列。

第三個包含乙個正整數m,表示詢問個數。

接下來m行,每行三個數l,r,k,表示詢問序列從左往右第l個數到第r個數中,從大往小第k大的數是哪個。序列元素從1開始標號。

輸出格式

總共輸出m行,每行乙個數,表示詢問的答案。

樣例輸入

51 2 3 4 5

21 5 2

2 3 2

樣例輸出42

資料規模與約定

對於30%的資料,n,m<=100;

對於100%的資料,n,m<=1000;

保證k<=(r-l+1),序列中的數<=106。

#include#include#include#includeusing namespace std;

bool cmp(int a,int b)

int a[1005];

int main()

int a[1005];

int main()

else ch=s[i]+32;

cout<} cout

}

藍橋杯練習之入門訓練

第一題 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,包含乙個整數,表示fn除以10007的餘數。說明 在本題中,答案是要求fn...

「藍橋杯」練習系統 入門訓練

include using namespace std int main 思路 若使用簡單迴圈相加會超時,用等差數列求和公式即可。注意n的規模在int的表示範圍 最大2147483647 之內,而結果的規模可能會超過int的表示範圍,所以使用long long型別。在n為偶數時,n 1 2會產生0....

藍橋杯練習之入門訓練

第一題 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,包含乙個整數,表示fn除以10007的餘數。說明 在本題中,答案是要求fn...