1 条题解

  • 0
    @ 2025-8-24 21:54:33

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar LinkyChristian
    公式恐惧症一级患者||Linky~Linky~Lin||关注Linky,场场AK!||Revue ☆ Starlight

    搬运于2025-08-24 21:54:33,当前版本为作者最后更新于2018-11-01 17:10:03,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    将读者的需求码与图书编码配对。

    • 把需求码与图书编码配对 = 求图书编码的后 X 位
    • 求图书编码的后 X 位 = 把前面的都去掉。

    如何把前面的无关数字去掉呢?这时候我们想起了 %\% 运算。

    对于一个数aa,很显然它的个位数是:a%10a \% 10

    但是这是我们人工计算出的结果,而各个需求码的位数不同,这时候就需要找出一个规律。

    对此我们发现了规律:对一个数 aa 取其后 nn 位,就是 a%10na \% 10^n

    cmath 头文件中带有专门执行幂运算的函数。

    其中有一个要注意的点是,pow 函数并不能直接进行 mod 运算,需要将其带入一个变量进行运算。

    遍历求最小值即可。

    最后贴代码

    #include<iostream>
    #include<cmath>
    using namespace std;
    int n,q,book[6666],len[6666],num[6666];
    
    int main()
    {
        cin>>n>>q;
        for(int i=1; i<=n; i++) cin>>book[i];
        for(int i=1; i<=q; i++) {
            cin>>len[i]>>num[i];
            int tmp = pow(10,len[i]),min = 10000001;
            for(int j=1; j<=n; j++) if(book[j] % tmp == num[i] && book[j] < min) min = book[j];
            if(min != 10000001) cout<<min<<endl;
            else cout<<-1<<endl; 
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1676
    时间
    1000ms
    内存
    250MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者