美文网首页
1583 - Digit Generator

1583 - Digit Generator

作者: 不会积 | 来源:发表于2017-02-28 21:09 被阅读0次
Problem.png

输入一个数,找出这个数的最小生成元。
生成元的意思是:一个整数,比如245,它本身加上它各位数之和等于256 (= 245 + 2 + 4 + 5),则245就是256的一个生成元。
这题有一个笨办法是对每一个输入整数N,枚举小于N的所有数,看他们是否是N的生成元,这种方法显然耗时太多。
有一个比较巧妙的方法是,题中的N最大值为100000,则我们对0~100000范围内的所有数,计算它们能成为哪些数的生成元(即能生成哪些数),以那些数为数组的索引,值为对应的生成元建立映射,则遍历一遍十万个数,就能建立一个映射数组,后面只需要按照输入来查表即可。

这种技巧感觉挺重要,对于某类映射问题,可以先枚举所有数造一个映射表,后面只需按照输入查表,可以节约很多时间。

#include <iostream>

using namespace std;

int gen[110000] = {0};

int main() {
    int T;
    cin >> T;
    for (int i = 100000; i >= 0; i--) {
        int sum = i, d = i;
        while (d) {
            sum += d % 10;
            d /= 10;
        }
        gen[sum] = i;
    }
    while (T) {
        int num;
        cin >> num;
        cout << gen[num] << endl;
        T--;
    }
}

另外还要注意,本题是求最小生成元,因此从大到小枚举所有数,让新算出来的较小的生成元覆盖掉旧的较大的生成元,从而最终得到的是最小生成元。

相关文章

  • 1583 - Digit Generator

    输入一个数,找出这个数的最小生成元。生成元的意思是:一个整数,比如245,它本身加上它各位数之和等于256 (= ...

  • UVa1583 Digit Generator -- Java

    我在 github 上建立了一个 repo,专门记录自己对刘汝佳的《算法竞赛入门经典(第二版)》中每个 UVa 例...

  • digit Generator

    1583 Digit GeneratorFor a positive integer N, the digit-s...

  • grep ip

    egrep '[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}...

  • 3-3 数数字(Digit Counting , ACM/ICP

    1225 - Digit Counting 习题3-3 数数字(Digit Counting , ACM/ICPC...

  • 1583、惜福

    2022.8.18周四29~37°C多云,优 今天早上起来不饿,昨晚吃得较饱,和一群有缘人聊聊天,又去体育场夜走了...

  • one plus

    Easy, Math Question 一个数以digit序列的形式给出,加一返回对应digit序列 Notes ...

  • Digit Counts

    Count the number of k's between 0 and n. k can be 0 - 9. ...

  • Digit Recognizer

    手写数字识别是非常经典的入门级实践项目了,MNIST则是用来初步检验一个图像分类方法好坏的不二之选数据集。之前练习...

  • SQL练习-用SQL处理数列

    ​生成连续编号 生成0~99的数。 select d1.digit+(d2.digit *10) as seq f...

网友评论

      本文标题:1583 - Digit Generator

      本文链接:https://www.haomeiwen.com/subject/ghjfgttx.html