zoukankan      html  css  js  c++  java
  • [Luogu] 国王游戏

    https://www.luogu.org/problemnew/show/P1080

    按照 a * b 排序

    高精度

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 1010;
    
    #define LL long long
    
    int n, ak, bk;
    struct Node {
        int A, B, AB;
        bool operator <(const Node a) const{return AB < a.AB;}
    } G[N];
    
    #define gc getchar()
    
    LL sum, Answer = 0;
    
    inline int read() {
        int x = 0; char c = gc;
        while(c < '0' || c > '9') c = gc;
        while(c >= '0' && c < '9') x = x * 10 + c - '0', c = gc;
        return x;
    }
    
    int main() {
        n = read(); ak = read(); bk = read();
        for(int i = 1; i <= n; i ++) G[i].A = read(), G[i].B = read(), G[i].AB = G[i].A * G[i].B;
        sort(G + 1, G + n + 1);
        sum = ak;
        for(int i = 1; i <= n; i ++) {
            LL imp = sum / G[i].B;
            if(!imp) imp = 1;
            Answer = max(Answer, imp);
            sum *= G[i].A;    
        }
        if(Answer == 0) Answer = 1;
        cout << Answer;
        return 0;
    }
    /*
    3 
    1 1 
    2 3 
    7 4 
    4 6 
    */
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int now[20010],sum[20010],ans[20010],add[20010];
    
    struct Node {
        int a;
        int b;
        long long a_b;
    } node[1010];
    
    int read() {
        int ans = 0, flag = 1;
        char ch = getchar();
        while( (ch > '9' || ch < '0') && ch != '-' ) ch = getchar();
        if(ch == '-') flag = -1, ch = getchar();
        while(ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar();
        return ans * flag;
    }
    void times(int x) {
        memset(add, 0, sizeof(add));
        for(int i = 1; i <= ans[0]; i ++) {
            ans[i] = ans[i] * x;
            add[i+1] += ans[i] / 10;
            ans[i] %= 10;
        }
        for(int i = 1; i <= ans[0] + 4; i ++) {
            ans[i] += add[i];
            if(ans[i]>=10) {
                ans[i+1]+=ans[i]/10;
                ans[i]%=10;
            }
            if(ans[i]!=0) {
                ans[0]=max(ans[0],i);
            }
        }
        return ;
    }
    int divition(int x) {
        memset(add,0,sizeof(add));
        int q=0;
        for(int i=ans[0]; i>=1; i--) {
            q*=10;
            q+=ans[i];
            add[i]=q/x;
            if(add[0]==0 && add[i]!=0) {
                add[0]=i;
            }
            q%=x;
        }
        return 0;
    }
    bool compare() {
        if(sum[0]==add[0]) {
            for(int i=add[0]; i>=1; i--) {
                if(add[i]>sum[i]) return 1;
                if(add[i]<sum[i]) return 0;
            }
        }
        if(add[0]>sum[0]) return 1;
        if(add[0]<sum[0]) return 0;
    }
    void cp () {
        memset(sum,0,sizeof(sum));
        for(int i=add[0]; i>=0; i--) {
            sum[i]=add[i];
        }
        return ;
    }
    bool cmp(Node a,Node b) {
        return a.a_b<b.a_b;
    }
    int main() {
        int n=read();
        for(int i=0; i<=n; i++) {
            node[i].a=read(),node[i].b=read();
            node[i].a_b=node[i].a*node[i].b;
        }
        sort(node+1,node+n+1,cmp);
        ans[0]=1,ans[1]=1;
        for(int i=1; i<=n; i++) {
            times(node[i-1].a);
            divition(node[i].b);
            if(compare()) {
                cp();
            }
        }
        for(int i=sum[0]; i>=1; i--)
            printf("%d",sum[i]);
        return 0;
    }
  • 相关阅读:
    让我用69406条评论告诉你“反贪风暴”好不好看!!!
    【大数据】爬取全部的校园新闻
    【大数据】获取一篇新闻的全部信息
    【大数据】理解爬虫原理
    中文统计
    [大数据]统计词频
    数据库表设计以及表字段命名
    设计模式的理论理解
    文件上传之oss服务器上传文件简笔
    QueryWrapper/UpdateWrapper认识
  • 原文地址:https://www.cnblogs.com/shandongs1/p/8684212.html
Copyright © 2011-2022 走看看