zoukankan      html  css  js  c++  java
  • 小雄数

    本人水平有限,题解不到为处,请多多谅解

    本蒟蒻谢谢大家观看

    传送门:彩蛋~

    Problem F: 小雄数

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 114  Solved: 56
    [Submit][Status][Web Board]

    Description

    小雄的幸运数字是3,小雄想知道,1~n中有多少数含有3。因为答案有可能很大,输出答案mod p的值。

    Input

    第1行:两个整数n和p。

    Output

    只有一行,一个整数s,表示1~n中有s个数中含有数字3。
    n≤10^100,p≤10^6。

    Sample Input

    100 100

    Sample Output

    19
    【样例说明】
    1~100中共有19个数中含有数字3,分别是3,13,23,30,31,32,33,34,35,36,37,38,39,43,53,63,73,83,93。

    HINT

    大意与第一题的 lucky 相同

    要注意数组开大一些记录ans时也要取膜 如:ans=(ans*10+a[i]-'0')%mod

    核心语句:ans=(ans-f[len-i+1][j]+mod)%mod;    取模运算 + - * /  保证不会有负数出现

    #include<bits/stdc++.h>
    using namespace std;
    unsigned long long f[212][212],ans,len,b[100001];
    int p;
    char a[1212];
    int main()
    {
        scanf("%s",a+1);
        scanf("%d",&p);
        len=strlen(a+1);
        for(int i=1;i<=len;i++)
        {
            ans=(ans*10+(a[i]-'0'))%p;
            b[i]=a[i]-'0';
        }
        f[0][0]=1;
        for(int i=1;i<=len;i++)
        {
            for(int j=0;j<=9;j++)
            {
                for(int k=0;k<=9;k++)
                {
                    if(j!=3)
                    {
                        f[i][j]=(f[i][j]+f[i-1][k])%p;
                    }
                }
            }
        }
        for(int i=1;i<=len;i++)
        {
            for(int j=0;j<b[i];j++)
            {
                ans=(ans-f[len-i+1][j]+p)%p;  一定要加上p,保证不会有负数出现
            }
            if(b[i]==3)
            {
                ans++;
                break;
            }
         } 
         printf("%d",ans);
     } 
  • 相关阅读:
    flex 弹性盒布局 移动端首页
    less+rem基础使用
    github 本地操作
    git 码云
    react基础知识
    css样式
    uni-app 知识点
    web app
    2019年一半已过,这些大前端技术你都GET了吗?- 下篇
    2019年大前端技术周刊-#31周
  • 原文地址:https://www.cnblogs.com/nlyzl/p/11263659.html
Copyright © 2011-2022 走看看