分析:
因為人的排的順序不一樣, 最後的結果也不一樣;題上說為讓的到最多肉鬆的人得到的最少,所以很明顯就是貪心, 而這道題貪心的目的就是得到乙個最優的排序。 這就需要我們找到乙個排序的比較函式。
假設對於a,b兩人以前的順序已經排好, 現在的問題就是a, b的順序。 設前面所有人左手乘積為t; 如果a在前,a得到的肉鬆餅的個數為 t/a2, b的到的個數為(t*a1)/b2; 如果b在前, 那麼a的到的就是(t*b1)/a2, b得到的個數就是t/b2;
現在的目標就讓兩者的最大值去最小; 現在我們發現t是對結果沒影響的。 所以顯而易見就是對a1/b2 和 b1/a2 求最小。 如果我們讓a排在b前面, 那麼就是a1/b2 < b1/a2, 化簡就是a1*a2 < b1*b2 , 所以我們就的到了排序的比較函式。
下面就高精度的問題了, 這是我第一次寫這樣高精度的題, 寫個模板,方便用。也是為了紀念一下。
#include#include#include#includeusing namespace std;
const int maxn = 1010;
struct info
a[maxn];
int f[maxn], fs[maxn];
int cmp(const info& a, const info& b)
int main()
si = i;
}t = t * a[i].l;
m = 0;
for(int j = 0; j <= 999; j++)
}m = 0;
for(int j = 999; j >= 0; j--)
{if(m == 1)
{if(fs[j] < 10)
cout<<"000";
else if(fs[j] < 100)
cout<<"00";
else if(fs[j] < 1000)
cout<<"0";
cout<0)
{m = 1;
cout<
NYOJ 1218 zkc學長的福利
時間限制 10000 ms 記憶體限制 65535 kb 難度 3 描述又是一年acm集訓的時刻,zkc學長邀請n位同學來玩乙個有獎遊戲。首先,他讓每個同學在左 右手上面分別寫下乙個整數,zkc學長自己也在左 右手上各寫乙個整數。然後,讓這n位同學排成一排,zkc學長站在隊伍的最前面。排好隊後,所有...
國王的遊戲(貪心 高精度)
恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手...
帶數學推導的貪心(高精度乘除法應用)
原題 題解 這個國王太會玩了!題意分析 首先,由於乙個大臣所獲得的金幣數隻取決於他右手的金幣數,所以前面的大臣順序並不影響後面大臣的金幣數,但會影響自己手中的金幣數。然後便想到了貪心。但發現這樣子並不能得出最優解。然後經過一番推導,便可以得知乙個大臣的左右手乘積越大,就越要放到隊伍後面。然後就開始了...