大数构造例题

对于大数,可以使用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
复制代码

 

posted @   80k  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示