ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

YbtOJ练习:贪心 例题4国王游戏

2020-08-04 14:34:21  阅读:181  来源: 互联网

标签:const int YbtOJ -- ans Div 例题 贪心


虽然这道题是一道例题,但是因为它用到了我不大熟悉的高精度算法,所以还是决定写一写。

至于证明过程相信无论是在书上,还是网上,聪明的你都已经知道了。

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,mul[N*4],Div[N*4],ans[N*4],temp[N*4];
struct node {
    int l,r;
    bool operator < (const node &G) const
    {
        return l*r<G.l*G.r;
    }
}hands[N];
void multify(int x)
{
    for(int i=1;i<=mul[0];i++) mul[i]*=x;
    for(int i=1;i<=mul[0];i++) 
    {
        mul[i+1]+=mul[i]/10;
        mul[i]%=10;
    }
    while(mul[mul[0]+1])
    {
        mul[0]++;
        mul[mul[0]+1]+=mul[mul[0]]/10;
        mul[mul[0]]%=10;
    }
}
void Divide(int x)
{
    memcpy(temp,mul,sizeof(mul));
    Div[0]=mul[0];
    int t=0;
    for(int i=temp[0];i;i--)
    {
        t=t*10+temp[i];
        if(t>=x)
        {
            Div[i]=t/x;
            t%=x;
        }
        else Div[i]=0;
    }
    while(Div[Div[0]]==0&&Div[0]>1) Div[0]--;
}
void max()
{
    if(Div[0]>ans[0]) memcpy(ans,Div,sizeof(Div));
    for(int i=Div[0];i;i--)
     if(Div[i]>ans[i])
     {
         memcpy(ans,Div,sizeof(Div));
         break;
     }
}
void print()
{
    while(ans[ans[0]]==0&&ans[0]>1) ans[0]--;
    for(int i=ans[0];i;i--) printf("%d",ans[i]);
}
int main()
{
    scanf("%d",&n);
    scanf("%d%d",&hands[0].l,&hands[0].r);
    for(int i=1;i<=n;i++) scanf("%d%d",&hands[i].l,&hands[i].r);
    sort(hands+1,hands+n+1);
    mul[0]=1;mul[1]=1;
    multify(hands[0].l);
    for(int i=1;i<=n;i++)
    {    
        Divide(hands[i].r);
        multify(hands[i].l);
        max();
    }
    print();
    return 0;
}

 

标签:const,int,YbtOJ,--,ans,Div,例题,贪心
来源: https://www.cnblogs.com/smartljy/p/13433047.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有