zoukankan      html  css  js  c++  java
  • ZOJ 3950 How Many Nines

    暴力,预处理。

    先计算出一个平年有多少$9$,一个闰年有多少$9$。一组数组,头和尾暴力枚举一下,中间的直接算。

    #include<bits/stdc++.h>
    using namespace std;
    
    int a[2][20]=
    {
        {0,31,28,31,30,31,30,31,31,30,31,30,31},
        {0,31,29,31,30,31,30,31,31,30,31,30,31},
    };
    
    int leap(int x)
    {
        if(x%400==0) return 1;
        if(x%4==0&&x%100!=0) return 1;
        return 0;
    }
    
    int c[20000];
    int x,y;
    int f[20000];
    int k[20000];
    
    void init()
    {
        for(int i=0;i<=9999;i++)
        {
            c[i]=0;
            int tmp=i;
            while(tmp)
            {
                if(tmp%10==9) c[i]++;
                tmp=tmp/10;
            }
        }
    
        int M=1, D=1;
        x=0;y=0;
    
        while(1)
        {
            x=x+c[D]+c[M];
    
            D++;
            if(D>a[0][M])
            {
                M++;
                D=1;
                if(M>12)
                {
                    M=1;
                }
            }
    
            if(M==12&&D==31) break;
        }
    
        y=x+1;
    
        for(int i=2000;i<=9999;i++) f[i] = leap(i) + f[i-1];
        for(int i=2000;i<=9999;i++) k[i] = k[i-1] + c[i]*(365+leap(i));
    
    }
    
    int main()
    {
        init(); int T; scanf("%d",&T);
        while(T--)
        {
    
            int ans=0;
    
            int A1,B1,C1; scanf("%d%d%d",&A1,&B1,&C1);
            int A2,B2,C2; scanf("%d%d%d",&A2,&B2,&C2);
    
            if(A1==A2||A1+1==A2)
            {
                int Y=A1, M=B1, D=C1;
                while(1)
                {
                    ans=ans+c[Y]+c[M]+c[D];
                    if(Y==A2&&M==B2&&D==C2) break;
    
                    D++;
                    if(D>a[leap(Y)][M])
                    {
                        M++;
                        D=1;
                        if(M>12)
                        {
                            M=1;Y++;
                        }
                    }
    
                }
            }
            else
            {
                int Y=A1, M=B1, D=C1;
                while(1)
                {
                    ans=ans+c[Y]+c[M]+c[D];
                    if(Y==A1&&M==12&&D==31) break;
    
                    D++;
                    if(D>a[leap(Y)][M])
                    {
                        M++;
                        D=1;
                        if(M>12)
                        {
                            M=1;Y++;
                        }
                    }
    
                }
    
                Y=A2, M=1, D=1;
    
                while(1)
                {
                    ans=ans+c[Y]+c[M]+c[D];
                    if(Y==A2&&M==B2&&D==C2) break;
    
                    D++;
                    if(D>a[leap(Y)][M])
                    {
                        M++;
                        D=1;
                        if(M>12)
                        {
                            M=1;Y++;
                        }
                    }
    
                }
    
                ans=ans+k[A2-1]-k[A1]+x*(A2-A1-1)+f[A2-1]-f[A1];
            }
    
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Kindeditor 代码审计
    tamper参数
    大学站注入点(安全狗)
    sqlmap注入小结
    tamper绕WAF详解
    网站安全狗最新版绕过测试
    大学站防SQL注入代码(ASP版)
    防SQL注入代码(ASP版)
    xss利用和检测平台
    tamper绕WAF小结
  • 原文地址:https://www.cnblogs.com/zufezzt/p/6690685.html
Copyright © 2011-2022 走看看