演算法訓練 審美課
時間限制: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...