[NOIP 2012]国王游戏 高精度+贪心

代码

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1000 + 2, Len = 4000 + 1, base = 10000;

struct Holder{
    int l,r;
}p[100000];

int cmp(Holder a,Holder b){
    return a.l*a.r<b.l*b.r;
}

struct Bign{
    int len;
    int v[Len];
    Bign(int r = 0) {for (len = 0; r > 0; r /= base) v[len++] = r % base;}
    Bign &operator = (const Bign &a){
        memcpy(this, &a, sizeof(int) * (a.len + 1));
        return *this;
    }
    bool operator < (const Bign &a){
        if (len != a.len) return len < a.len;
        for (int i = len - 1; i >= 0; i--)
            if (v[i] != a.v[i]) return v[i] < a.v[i];
        return false;
    }
}temp,res,ans;

ostream &operator << (ostream &out, const Bign &a){
    printf("%d", a.len == 0 ? 0 : a.v[a.len - 1]);
    for (int i = a.len - 2; i >= 0; i--) printf("%04d", a.v[i]);
    return out;
}
Bign operator * (const Bign &a, const int &b){
    Bign ans = 0;
    if (!a.len || !b) return ans;
    int carry = 0, i;
    for (i = 0; i < a.len || carry; i++){
        if (i < a.len) carry += a.v[i] * b;
        ans.v[i] = carry % base;
        carry /= base;
    }
    ans.len = i;
    return ans;
}
Bign operator / (const Bign &a, const int &b){
    Bign ans = a;
    int carry = 0;
    for (int i = ans.len - 1; i >= 0; i--){
        ans.v[i] += carry * base;
        carry = ans.v[i] % b;
        ans.v[i] /= b;
    }
    while (!ans.v[ans.len - 1] && ans.len) ans.len--;
    return ans;
}

int n;

int main() {
    scanf("%d",&n);
    scanf("%d%d",&p[0].l,&p[0].r);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&p[i].l,&p[i].r);
    }   
    sort(p+1,p+1+n,cmp);
    res=p[0].l;
    for(int i=1;i<=n;i++){
        temp=res/p[i].r;
        if(ans<temp){
            ans=temp;
        }
        res=res*p[i].l;
    }
    cout<<ans;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值