1. 程式人生 > >國王遊戲

國王遊戲

輸入 整數 希望 pri name style ans turn 下一個

題目描述

恰逢 H 國國慶,國王邀請 n 位大臣來玩一個有獎遊戲。首先,他讓每個大臣在左、右

手上面分別寫下一個整數,國王自己也在左、右手上各寫一個整數。然後,讓這 n 位大臣排

成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若幹金幣,每

位大臣獲得的金幣數分別是:排在該大臣前面的所有人的左手上的數的乘積除以他自己右

手上的數,然後向下取整得到的結果。

國王不希望某一個大臣獲得特別多的獎賞,所以他想請你幫他重新安排一下隊伍的順序,

使得獲得獎賞最多的大臣,所獲獎賞盡可能的少。註意,國王的位置始終在隊伍的最前面。

輸入輸出格式

輸入格式:

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

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

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

和右手上的整數。

輸出格式:

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

金幣數。

輸入輸出樣例

輸入樣例#1:
3 
1 1 
2 3 
7 4 
4 6 
輸出樣例#1:
2

說明

【證明】

【code】

//洛谷50分做法 
#include<iostream>
#include<cstdio>
#include<algorithm>
using
namespace std; #define LL long long #define M 10005 int n; LL ans=-1,sum; struct Per { LL l,r; }person[M]; bool cmp(Per a,Per b) { if(a.l==b.l)return a.r<b.r; return a.l<b.l; } int main() { scanf("%d",&n); scanf("%lld%lld",&person[0].l,&person[0].r); for(int i=1
;i<=n;i++) scanf("%lld%lld",&person[i].l,&person[i].r); sort(person+1,person+n+1,cmp);sum=person[0].l; for(int i=1;i<n;i++) { ans=max(ans,sum/person[i].r); sum*=person[i].l; } printf("%lld\n",ans); return 0; }
//60分。 
#include<iostream>
#include<cstdio>
#include<algorithm> 
using namespace std;
#define LL long long
#define M 10005
struct Per
{
    LL l,r;
}person[M];
bool cmp(Per a,Per b)
{
    return a.l+a.r<b.l+b.r;
}
int n;
LL js=1,ans=-1;
int main()
{
    scanf("%d",&n);
    for(int i=0;i<=n;i++)
    {
        scanf("%d %d",&person[i].l,&person[i].r);
    }
    sort(person+1,person+n+1,cmp);
    js=person[0].l; 
    for(int i=1;i<=n;i++)
    {
        ans=max(ans,js/person[i].r);
        js*=person[i].l;
    }
    printf("%lld\n",ans);
    return 0;
}

實在不想打高精....QAQ.

國王遊戲