zoukankan      html  css  js  c++  java
  • 洛谷P1080 国王游戏

    https://www.luogu.org/problem/P1080

    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<int, int> PII;//pair真tm是个好东西
    const int N = 1010;
    int n;
    PII p[N];  //
    vector<int> mul(vector<int> &A, int b) {  //高精度乘法
        vector<int>C;
        int t=0;
        for(int i=0; i<A.size()||t; i++) {
            if(i<A.size())  t+=A[i]*b;
            C.push_back(t%10);
            t/=10;
        }
        return C;
    }
    vector<int> div(vector<int> &A, int b) { //高精度除法
        vector<int>C;
        int r=0;
        for(int i=A.size()-1; i>=0; i--) {
            r=r*10+A[i];
            C.push_back(r/b);
            r%=b;
        }
        reverse(C.begin(),C.end());
        while(C.size()>1&&C.back()==0)  C.pop_back();
        return C;
    }
    vector<int> max_vec(vector<int> a, vector<int> b) {  //取较大   更新答案
        if (a.size() > b.size()) return a;  //先比较位数
        if (a.size() < b.size()) return b;
        //构造新的vector是a的逆序   当两个vector长度一样的时候,他们的大小关系就和她们的字典序大小关系一样
        if (vector<int>(a.rbegin(), a.rend()) > vector<int>(b.rbegin(), b.rend())) return a;
        return b;
    }
    int main() {
        cin >> n;
        for (int i = 0; i <= n; i ++ ) {  //第一个为国王,所以从0开始循环
            int a, b;   //a表示左手,b表示右手
            cin >> a >> b;
            p[i] = {a * b, a};  //按乘积排序
        }
        sort(p + 1, p + n + 1);  //从小到大排序
        vector<int> product(1, 1);  //存乘积   初始为1
        vector<int> res(1, 0);  //答案    初始为0
        for (int i = 0; i <= n; i ++ ) {
            //因为国王不会给自己发奖励,所以只有大于0的时候,才会更新答案
            if (i) res = max_vec(res, div(product, p[i].first / p[i].second));  //前面所有数的乘积,除以当前的数字
            product = mul(product, p[i].second);  //存一下乘积
        }
        for (int i = res.size() - 1; i >= 0; i -- ) cout << res[i];  //输出  倒叙
        cout << endl;
        return 0;
    }
  • 相关阅读:
    opencv ImportError: libSM.so.6: cannot open shared object file: No such file or directory
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcd
    Linux卸载并更新显卡驱动
    人脸识别
    dav转mp4
    python调用c++接口,参数为opencv读取数据
    Linux下内存泄漏工具valgrind
    模型轻量化
    自动驾驶车搭建
    TSN(Temporal Segment Networks)
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11766252.html
Copyright © 2011-2022 走看看