NOIP提高組2012 國王遊戲

2021-07-14 15:43:19 字數 1453 閱讀 6565

題目描述:

恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下乙個整數,國王自己也在左、右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是:排在該大臣前面的所有人的左手上的數的乘積除以他自己右手上的數,然後向下取整得到的結果。國王不希望某乙個大臣獲得特別多的獎賞,所以他想請你幫他重新安排一下隊伍的順序,使得獲得獎賞最多的大臣,所獲獎賞盡可能的少。注意,國王的位置始終在隊伍的最前面。

輸入輸出格式

輸入格式:

第一行包含乙個整數 n,表示大臣的人數。

第二行包含兩個整數 a和 b,之間用乙個空格隔開,分別表示國王左手和右手上的整數。

接下來 n 行,每行包含兩個整數 a 和 b,之間用乙個空格隔開,分別表示每個大臣左手

和右手上的整數。

輸出格式:

輸出只有一行,包含乙個整數,表示重新排列後的隊伍中獲獎賞最多的大臣所獲得的金幣數。

題目思路:高精度+貪心:

#include

#include

#include

#include

using

namespace

std;

struct nodex[100000];

int a[100000],b[100000],d[100000],max1[100000],l,maxl=0,ansr=0,ansl=0,r;

char s[100000];

int cmp(node a,node b)

void lily(int a,int x)

}while(d[l+1])l++;

while(d[l]/10)

for(i=1;i<=l;i++)a[i]=d[i];

}void lily2(int a,int x)

int c=0;

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

}if(c==1)

if(maxl>l-r+1 || d[i]break;}}

}int main(void)

sort(x+1,x+n+1,cmp);//貪心按雙手乘積排列

while(x[0].a)

l=strlen(s);

for(i=1;i<=l;i++) a[i]=s[i-1]-48;//高精

for(i=1;i<=l;i++) b[i]=s[l-i]-48;

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

}for(i=r;i<=maxl+r-1;i++)printf("%d",max1[i]);//輸出

return

0;}

NOIP 提高組2012 國王遊戲

題意 恰逢h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右 手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這n位大臣排 成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每 位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手...

貪心 Noip 2012 提高組 國王遊戲

題目鏈結 做法 貪心。考慮大臣 k,k 1 交換。原先 k 的獎勵為 prod limits a i cdot dfrac k 1 的獎勵為 prod limits a i cdot dfrac 原先位置為 k 交換後的獎勵為 prod limits a i cdot dfrac 原先位置為 k 1...

NOIP2012 提高組 day1 國王遊戲

題解這道題是一道貪心題,大家只需要找到貪心策略是左手與右手的乘積,然後從小到大sort一下就ok了 不過大家有一點需要小小注意一下,需要打乙個高精度,要不然就只有60了 include define maxn 10005 using namespace std int a 10005 n,len,x...