文章

2

粉丝

289

获赞

1

访问

17.4k

头像
是一个动态规划的思想,375中各个数字的次数取决于37,因此逐位处理
P1707 武汉大学2018年机试题
发布于2021年2月27日 22:03
阅读数 8.4k

以37->375的动态规划为例

我们已经计算出37的各个数字出现次数

那么当37->375,有一下这些情况:

1、原1-->37中出现的数字全部*10,很容易理解,原有的15-->151、152、153……159,15由一次变为10次

2、新增了0-->9,因为原来的一位数都变成了两位数

3、原来1--37各自匹配一次0--9,那么0--9各自出现了37次

4、我们在第一步直接x10,那说明我们直接算到了379,事实上我们是375,那么6--9要各减去一次,除此之外3、7要减去4次(9-5=4)

5、再解释一下第4步,以我举的例子为例,我们多算了376、377、378、379,3和7多算了4次,6、7、8、9各多算一次

现在我们知道了一个数,他的出现的数字怎么统计,那我们只需要b的次数减去(a-1)的次数就得到了答案。

#include <algorithm>
#include <bits/stdc++.h>
#include <iostream>
#include <string>

using namespace std;

typedef long long ll;

long long res_a[10] = {0};
long long res_b[10] = {0};

void deal(string a, ll res[])
{
    if (a == "0")
        return;
    ll num = 0;
    //首位手动处理
    for (int i = 0; i < 10; ++i)
    {
        res[i] *= 10;
        res[i] += 1;
        res[i] += num;
    }
    res[0]--;
    int unit = a[0] - '0';
    for (int i = 9; i > unit; i--)
    {
        res[i]--;
    }
    num = num * 1...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发