1 条题解

  • 0
    @ 2025-8-24 22:50:26

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Jasoncwx
    关注@Jasoncwx谢谢喵!最后在线时间:2025年8月24日19时1分

    搬运于2025-08-24 22:50:26,当前版本为作者最后更新于2023-09-17 13:40:32,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    题目思路

    不难发现,只要 [l,r][l,r] 中出现至少一个整十数,也就是存在至少一个 lirl\le i\le r,使得 imod10=0i\bmod10=0,这样 f(i)f(i) 的最终结果肯定为 00,导致了 i=lrf(i)\prod_{i=l}^r f(i) 也会为 00

    那我们在什么情况下输出 00 呢?

    可以证明,在 rl+110r-l+1\ge10 的情况下,至少会出现一个整十数。因为要使得一个区间内没有整十数,这个区间内不能多于 99 个数。

    顾名思义,"整十数"就是每隔 1010 个整数会出现一次,所以我们要避免这种情况就只能不多于 99 个数了。

    所以在 rl+110r-l+1\ge10 时直接输出 00,其它情况直接暴力枚举即可。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int mod=1e9+7;
    long long f(int n){
        string s=to_string(n);
        long long sum=1;
        for(int i=0;i<s.size();i++)sum*=s[i]-'0';
        return sum;
    }//计算 f(n)
    int main(){
        int t;
        cin>>t;
        while(t--){
            int l,r;cin>>l>>r;
            if(r-l+1>=10)puts("0");//区间中出现整十数
            else{
                long long sum=1;
                for(int i=l;i<=r;i++){
                    sum=(sum*f(i))%mod;//答案
                }
                cout<<sum<<endl;
            }
        }
    }
    
    • 1

    信息

    ID
    9210
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者