其他分享
首页 > 其他分享> > 大数构造例题

大数构造例题

作者:互联网

对于大数,可以使用string存储。

如果要构造最大的大数,注意数的大小首先比较数的长度,然后从首位往后面的位比较。

例题:

https://atcoder.jp/contests/abc257/tasks/abc257_e

首先可以计算出,可以构造出的最长位数

然后再从大到小对每一位,贪心的判断是否可以换成更大的数。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL C[10];
string dp[1000010];

void YD()
{
    LL n;
    cin >> n;
    for (int i = 1; i <= 9; i++) cin >> C[i];
    LL *p= min_element(C + 1, C + 10);
    LL min_c = *min_element(C + 1, C + 10);
    LL len = n / min_c;
    string res(len, '0' + p-C);
    LL remain = n % min_c;
    for (int i = 0; i < len; i++)
    {
        LL change = 0;
        for (int j = 1; j <= 9; j++)
        {

            if (remain >= C[j] - min_c && j > res[i] - '0')
            {
                change = C[j] - min_c;
                res[i] = '0' + j;

            }

        }
        remain -= change;
    }
    cout << res << endl;

    
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T = 1;
    //cin >> T;
    while (T--)
    {
        YD();
    }
    return 0;
}
View Code

 

标签:string,min,int,res,LL,大数,构造,len,例题
来源: https://www.cnblogs.com/ydUESTC/p/16418826.html