BSOJ 3362 聰明的農民 貪心

2021-07-23 09:11:11 字數 1422 閱讀 2103

3362 -- 【模擬試題】聰明的農民

description

在城中有乙個貪婪而愚蠢的領主,他總是不管農民的死活,瘋狂地敲詐農民們辛勤耕種的勞動成果。眼看每年的秋收日十月十日已經到了,這時城中所有的農民在忙完一年的收成後,又要向領主上繳一年的糧食了。很久以來當地就採用乙個特殊的「抽籤」決定各戶農民上繳糧食的方法:領主將一些寫有不同的數的紙條放入乙個盒子中,每戶農民從中抽取兩張紙條並在第二天上繳和兩張紙條上的數值相乘結果同樣數量的糧食。

城中的農民是個既聰明又團結的整體,他們非常痛恨殘暴的領主,不希望向他多交一粒糧食,所以他們每年在抽完籤後,秘密地交換一些紙條,使最後向領主上繳的糧食總量最少。不幸的是,以往決定如何交換紙條的老農夫傑克病倒了,不能為大家出力了,所以請你幫助他們決定如何交換紙條。另外,為了瞞過領主,活動只能在夜間悄悄進行,因此務必要使交換次數最少(兩個農民將各自的一張紙條對調叫做一次交換)。

input

檔案的第一行為農戶數目n(n≤500),接下來的n行,每行為兩個數a、b,其中a、b兩數均不超過1000。相鄰兩個數之間由乙個或多個空格分隔。

output

輸出檔案由兩個數組成,每個數占一行,分別為交換後向領主上繳的糧食總量和需要交換的總次數。

sample input3

10 13

7 12

9 6

sample output

252 1

第乙個問是乙個比較數學的問題,可以證明,大*小得到的乘積最小,這裡我們肯定先貪心優化比較大的數,於是排序,兩根指標,頭*尾累加即可。

第二個問題可以根據第乙個問的結果進行求解,進行每組列舉,如果「原本組」與「匹配組」的不同,就修改各自組別,sum++,輸出即可。

yo,這裡是**。

#include#include#include#include#includeusing namespace std;

int n,ans1=0,ans2=0,a[1000005]=;

int b[100005]=;

int idx[100045]=;

int main()

sort(a+1,a+2*n+1);

for(int i=1;i<=n;i++)ans1+=a[i]*a[2*n-i+1];//貪心

printf("%d\n",ans1);

for(int i=1;i<=n;i++)

}if(fl)continue;

for(int j=1;j<=n;j++)

}//交換各自組別}}

printf("%d\n",ans2);

return 0;

}

BSOJ 3800 染色 貪心

3800 四校聯考1 染色 description 人人生而平等,然而後來人們逐漸選擇了不同的道路,人與人之間,變得不再平等。你可能會因為染上惡人之色而墮落,成為社會的敗類 你也可能因為染上善人之色,而在逆境中不斷成長。但是,紅與黑並非絕對的。所謂 近朱者赤,近墨者黑 你能改變周遭的環境,那麼周遭的...

JZOJ3362 NOI2013模擬 數數

求區間 a,b a,b a,b 有多少個數是 完美的 乙個數是 完美的 當且僅當這個數的各位能分成兩個集合,使得兩個集合中數字的和相等。b 1 09 b leq 10 9 b 10 9其實思考這題的時候已經沒有什麼時間了。但我還是努力地去想正解。看到的第一眼就會想到數字dp,然後腦中就彈出了乙個dp...

BSOJ 4852 比賽 暴力優化

4852 模擬試題 比賽 description 有兩個隊伍a和b,每個隊伍都有n個人。這兩支隊伍之間進行n場1對1比賽,每一場都是由a中的乙個選手與b中的乙個選手對抗。同乙個人不會參加多場比賽,每個人的對手都是隨機而等概率的。例如a隊有a1和a2兩個人,b隊有b1和b2兩個人,那麼 a1 vs b...