說實話我一開始是不想發這道題的,雖然比較水,但不知道是不是因為我太久都沒有寫高精度了,還是寫錯了,才40分,還是發上來吧。
恰逢h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下乙個整數,國王自己也在左、右手上各寫乙個整數。然後,讓這n位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是:排在該大臣前面的所有人的左手上的數的乘積除以他自己右手上的數,然後向下取整得到的結果。這道題沒什麼說的,就是以來可以看出是貪心,但是不好直接看出貪心的正確性,這裡就簡單地說一下。國王不希望某乙個大臣獲得特別多的獎賞,所以他想請你幫他重新安排一下隊伍的順序,使得獲得獎賞最多的大臣,所獲獎賞盡可能的少。注意,國王的位置始終在隊伍的最前面。
格式第一行包含乙個整數n,表示大臣的人數。
第二行包含兩個整數a和b,之間用乙個空格隔開,分別表示國王左手和右手上的整數。接下來n行,每行包含兩個整數a和b,之間用乙個空格隔開,分別表示每個大臣左手和右手上的整數。
輸出只有一行,包含乙個整數,表示重新排列後的隊伍中獲獎賞最多的大臣所獲得的金幣數。
樣例輸入
3 1 1
2 3
7 4
4 6
樣例輸出每個測試點1s
對於20%的資料,有1≤ n≤ 10,0 < a、b < 8;
對於40%的資料,有1≤ n≤20,0 < a、b < 8;
對於60%的資料,有1≤ n≤100;
對於60%的資料,保證答案不超過10^9;
對於100%的資料,有1 ≤ n ≤1,000,0 < a、b < 10000。
noip2012提高組複賽day1t2
首先我們貪心很簡單,就是直接按照左右手的乘積由小到大排序,最後的人左右手成績最大
我們可以這樣來考慮:現在一共有x人等著我們排序我們設所有人的左手乘積mu
lit(
x)=∏
xi=1
left
(i)那麼最後乙個人的值就是mu
lit(
x)le
ft(x
)∗ri
ght(
x)所以我們就直接按照成績來排序就可以了
然後mulit(x)用高精度算就可以了,沒什麼好多說的了,直接放**了
**如下:
#include
#include
#include
#include
#include
#define m 10005
using
namespace
std;
struct hp
mul,mx;
struct person
p[m];
bool com(const person &a,const person &b)
return0;}
void mulit(hp &a,int b)
while(a.n[a.n[0]]>=10)
}hp chu(hp a,int b)
while(a.n[a.n[0]]==0)a.n[0]--;
return a;
}int n;
int main()
sort(p+1,p+1+n,com);
for(int i=1;i<=n;i++)
for(int i=mx.n[0];i>=1;i--)printf("%d",mx.n[i]);
return
0;}
國王遊戲 貪心 高精度
關於高精度演算法的小理解大家可以看看我的文章嘿嘿嘿 高精度演算法 一.題目描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會...
貪心 高精度 國王遊戲
恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手...
NOIP2012 貪心 高精度 國王遊戲
恰逢h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這n位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手上的數的乘積...