B3672 [语言月赛202210] 图书新编 题解

· · 题解

Source & Knowledge

2022 年 10 月语言月赛,由洛谷网校入门计划/基础计划提供。

题目大意

给定若干本图书的编码和若干读者的需求码。如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。对于每位读者,求解其需要的书本数量。

题目分析

对于十进制数 c,如果想要提取出其最后 k 位,那么比较好的处理方法是计算 c \bmod 10^k,即计算 c 除以 10^k 的余数。

因此对于每位读者的需求码 x, y,我们遍历已经存放的书籍编码,将编码对 10^x 取模,判断结果是否与 y 相等即可。

核心代码如下:

const int digit[] = {0, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};

// a 是存放书籍编码的数组

for (int i = 1; i <= q; ++i) {
    int x, y;
    cin >> x >> y;
    int cnt = 0;
    for (int j = 1; j <= n; ++j) {
        int var1 = a[j] % digit[x];
        if (var1 == y)
            ++cnt;
    }
    cout << cnt << endl;
}

视频讲解