[永遠の記憶 ~ Precious Memories]P1980题解

· · 个人记录

[永遠の記憶 ~ Precious Memories]施工D17

2020.8.28

P1980 计数问题

Noip2013 T1

题目传送门

时间有点来不及,下周一就要返校了。我还摸了两天的鱼。

反正赶快讲这道题。仍然是清新正直的T1的难度,不过这次的T1稍微有一点技术含量,好像一年半前卡了我一两天(因为我对P1980这个东西特别熟悉)。

题意很简单,给定区间,问区间中的数中的每一位数字给定数字相同的有几个。尽管时隔很长时间,我还能想起当时我的想法是用字符串去模拟(因为找数很方便),但是写了一天发现累加有点困难,那时候也没有学过高精度的原理啥的,所以放了一天。

研究了一天以后发现,这个东西不就是个很简单的数位分离吗(那时候刚讲过,但是好像忘了)。原理是用 除10 和 模 10 来实现将一个数按顺序分离数位。似乎是有公式的,但是我始终记不住,反正用的时候推一推就有了。

综合以上思路,我们很容易就可以写出 AC 的代码(记得开 long\ long ) :

#include <iostream>
using namespace std;

typedef long long ll;

ll n, t, x, s, i;

int main() {
    cin >> n >> x;
    for (i = 1; i <= n; ++i) {
        t = i;
        while (t != 0) {
            if (t % 10 == x) {
                ++s;
            }
            t /= 10;
        }
    }
    cout << s << endl;
    return 0;
}

以前这样的题能卡我一周多,现在想想,感慨啊~
赶快去写下一篇了,拜拜~