• 关于521(nyoj)


    关于521 点击这里

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:2
    描述

    Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去。

    浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者。此后,流年走到哪里都能看到5、2、1三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字。例如12356就算一个,而5111就不算。特别的,如果他看到了521三个数连续出现,会特别的愤怒。例如35210。

    输入
    多组测试数据:
    一行给定两个数a,b(0<a,b<1000000),表示数字的开始和结束。
    输出
    一行显示他想要知道的数有几个及显示有多少个数字令他特别的愤怒。用空格隔开。
    样例输入
    200 500
    300 900
    1 600
    样例输出
    Case 1:2 0
    Case 2:2 1
    Case 3:6 1
     1 #include<stdio.h>
     2 int num[2][1000001]={0};
     3 int main()
     4 {
     5     int a,b,i;
     6     int j=0,k=0;
     7     for(i=125;i<1000000;i++)
     8     {
     9         if((i%10==1||(i/10)%10==1||(i/100)%10==1||(i/1000)%10==1||(i/10000)%10==1||(i/100000)==1)
    10             &&(i%10==2||(i/10)%10==2||(i/100)%10==2||(i/1000)%10==2||(i/10000)%10==2||(i/100000)==2)
    11             &&(i%10==5||(i/10)%10==5||(i/100)%10==5||(i/1000)%10==5||(i/10000)%10==5||(i/100000)==5))
    12             j++;
    13         if(i/1000==521||i%1000==521||(i/10)%1000==521||(i/100)%1000==521)
    14             k++;
    15         num[0][i]+=j;
    16         num[1][i]+=k;
    17     }
    18     i=0;
    19     while(~scanf("%d%d",&a,&b))
    20     {
    21         printf("Case %d:%d %d
    ",++i,num[0][b]-num[0][a-1],num[1][b]-num[1][a-1]);
    22     }
    23     return 0;
    24 }
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int function1(int x)
    {
        int a[6],i,j;
        for(i=5;i>=0;i--)
        {
            a[i]=x%10;
            x/=10;
        }
        for(i=0;i<4;i++)
        {
            if(a[i]==5&&a[i+1]==2&&a[i+2]==1)
                return 1;
        }
        return 0;
    }
    int function2(int x)
    {
       int a[6],k=0,i,j;
        for(i=5;i>=0;i--)
        {
            a[i]=(x%10);
            x/=10;
        }
        for(i=0;i<6;i++)
            if(a[i]==5)
            {
                k++;
                break;
            }
        for(i=0;i<6;i++)
            if(a[i]==2)
            {
                k++;
                break;
            }
        for(i=0;i<6;i++)
            if(a[i]==1)
            {
                k++;
                break;
            }
        if(k==3)
            return 1;
        else
            return 0;
    
    }
    int m[1000000],n[1000000];/*吐一地血。。设成局部变量就WA,搞不懂!!!!*/
    int main()
    {
        int a,b,i,u=0;
        int p=0,k=0,j=0;
            for(i=125;i<=1000000;i++)
            {
                if(function1(i)&&function2(i))
                {
                    u++;
                }
                    m[i]+=u;
                if(function2(i))
                {
                    p++;
                }
                    n[i]+=p;
            }
        n[0]=0;
        while(~scanf("%d%d",&a,&b))
        {
            printf("Case %d:%d %d
    ",++j,n[b]-n[a-1],m[b]-m[a-1]);
        }
    }
  • 相关阅读:
    bzoj 3747: [POI2015]Kinoman
    bzoj 3123: [Sdoi2013]森林
    bzoj 1901: Zju2112 Dynamic Rankings
    poj 1741 Tree
    bzoj 2152: 聪聪可可
    bzoj 2599: [IOI2011]Race
    bzoj 3697: 采药人的路径
    bzoj 2728: [HNOI2012]与非
    bzoj 2115: [Wc2011] Xor
    bzoj 3143: [Hnoi2013]游走
  • 原文地址:https://www.cnblogs.com/a1225234/p/4532049.html
Copyright © 2020-2023  润新知