【NOIP2012 提高组 day1】国王游戏

【NOIP2012 提高组 day1】国王游戏

在这里插入图片描述在这里插入图片描述
题解这道题是一道贪心题,大家只需要找到贪心策略是左手与右手的乘积,然后从小到大sort一下就OK了;(不过大家有一点需要小小注意一下,需要打一个高精度,要不然就只有60了)

#include<bits/stdc++.h>
#define MAXN 10005
using namespace std;
int a[10005],n,len,x,y;
struct each{
   long long a,b;
}use[10005];
bool cmp(const each x,const each y){
   return x.a*x.b < y.a*y.b;
}
void m(int x){
   for(int i=1; i<=len; i++){
       a[i]*=x;
   }
   for(int i=1; i<=len; i++){
       if(a[i]>=10)
       {
           a[i+1]+=a[i]/10;
           a[i]%=10;
       }
       if(i==len&&a[i+1]!=0)len++;
   }
}
void d(int mod){
   int rest=a[len];
   int i;
   for(i=len-1; i>0; i--){
       if(rest>=mod)break;
       rest=rest*10+a[i];
   }
   if(rest<mod){
       printf("1");
       return;
   }
   while(i>0){
       printf("%d",rest/mod);
       rest%=mod;
       rest=rest*10+a[i--];
   }
   printf("%d",rest/mod);
}
int main(){
   cin>>n>>x>>y;
   for(long long i=1; i<=n; i++){
       scanf("%d%d",&use[i].a,&use[i].b);
   }
   sort(use+1,use+n+1,cmp);
   a[1]=x;
   len=1;
   for(int i=1; i<n; i++){
       m(use[i].a);
   }
   d(use[n].b);
   return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值