vijos 1779 国王游戏

练了一下高精度。。结果敲了这么久。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1050
using namespace std;
struct pnt
{
    int x,y;
}p[maxn];
int n,a,b;
struct bign
{
    int len,a[4050];
};
bign base,ans;
bool cmp(pnt x,pnt y)
{
    return max(y.y,x.y*x.x)<max(x.y,y.x*y.y);
}
void reset()
{
    ans.len=0;ans.a[0]=0;
    int ret=a;base.len=0;
    while (ret)
    {
        base.a[base.len]=ret%10;
        ret/=10;base.len++;
    }
    base.len--;
}
bign operator / (bign x,int m)
{
    int ret[4050],len=0,data=0;
    for (int i=x.len;i>=0;i--)
    {
        data=data*10+x.a[i];
        ret[++len]=data/m;data%=m;
    }
    int now=1;while ((!ret[now]) && (now<=len)) now++;
    bign y;
    if (now==len+1)
    {
        y.len=0;y.a[0]=0;
        return y;
    }
    y.len=len-now;
    for (int i=y.len;i>=0;i--)
    {
        y.a[i]=ret[now];
        now++;
    }
    return y;
}
bool operator > (bign x,bign y)
{
    if (x.len<y.len) return false;
    if (x.len>y.len) return true;
    int top=x.len;
    for (int i=top;i>=0;i--)
    {
        if (x.a[i]>y.a[i]) return true;
        if (x.a[i]<y.a[i]) return false;
    }
}
bign operator * (bign x,int m)
{
    bign y,ans;
    while (m) {y.a[y.len++]=m%10;m/=10;}
    y.len--;
    for (int i=0;i<=x.len+y.len+1;i++) ans.a[i]=0;
    for (int i=0;i<=x.len;i++)
        for (int j=0;j<=y.len;j++)
            ans.a[i+j]+=x.a[i]*y.a[j];
    for (int i=0;i<=x.len+y.len;i++)
    {
        ans.a[i+1]+=ans.a[i]/10;
        ans.a[i]%=10;
    }
    ans.len=x.len+y.len;
    if (ans.a[x.len+y.len+1]) ans.len++;
    return ans;
}
int main()
{
    scanf("%d",&n);
    scanf("%d%d",&a,&b);
    for (int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);
    sort(p+1,p+n+1,cmp);
    reset();
    for (int i=1;i<=n;i++)
    {
        bign ret=base/p[i].y;
        if (ret>ans) ans=ret;
        base=base*p[i].x;
    }
    for (int i=ans.len;i>=0;i--) printf("%d",ans.a[i]);
    return 0;
}
时间: 2024-10-23 04:34:19

vijos 1779 国王游戏的相关文章

1198 国王游戏

1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自

【贪心+排序】国王游戏

[贪心+排序]国王游戏 Time Limit: 1000MS Memory Limit: 131072KB Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果. 国王不希

洛谷P1080 [NOIP2012提高组D1T2]国王游戏 [2017年5月计划 清北学堂51精英班Day1]

P1080 国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大

洛谷P1080 国王游戏 高精度 贪心 数学推公式

洛谷P1080 国王游戏        数学推公式      高精度    贪心 然而这并不是我打出来的,抄题解... 将左手与右手的乘积从小到大排序,然后计算求最大值即可.(需要高精度) 证明: 1)知道,如果相邻的两个人交换位置,只会影响到这两个人的值,不会影响他人 2)假设相邻的两个人i, i + 1.设A[i] B[i] <= A[i + 1] B[i + 1],i之前所有人的左手乘积为S. 则,ans1 = max{S / B[i], S * A[i] / B[i + 1]} 若交换

AC日记——国王游戏 洛谷 P1080

国王游戏 思路: 贪心+高精: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 struct DataType { int a,b,key; bool operator<(const DataType pos)const { return key<pos.key; } }; struct DataType ai[maxn]; struct BintType { int len; char ch[

2012年 国王游戏

国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果.国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少.注

【NOIP 2012 国王游戏】 贪心+高精度

题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大臣,所获奖赏尽可能的少

noip2012 国王游戏

1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手

国王游戏(贪心+大数)

                                                   4824: 国王游戏 时间限制(普通/Java):3000MS/9000MS     内存限制:65536KByte总提交: 2            测试通过:1 描述 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这n位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干