zoukankan      html  css  js  c++  java
  • Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜

    2393: Cirno的完美算数教室

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 287  Solved: 175
    [Submit][Status][Discuss]

    Description

    ~Cirno发现了一种baka数,这种数呢~只含有2和⑨两种数字~~
    现在Cirno想知道~一个区间中~~有多少个数能被baka数整除~
    但是Cirno这么天才的妖精才不屑去数啦
    只能依靠聪明的你咯。
     
     

    Input

    一行正整数L R 
    ( 1 < L < R < 10^10)
     

    Output

    一个正整数,代表所求的答案
     

    Sample Input

    1 100

    Sample Output

    58

    HINT

     

    Source

     题解:
    容斥原理+爆搜。
    从大到小搜常数会变小  QAQ
    话说“Cirno的完美算数教室”是什么鬼。。。233。。。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define LL unsigned long long
     4 #define MAXN 1100
     5 LL cc[MAXN],L,R,lc,sum;
     6 bool vis[MAXN];
     7 LL read()
     8 {
     9     LL s=0,fh=1;char ch=getchar();
    10     while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();}
    11     while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();}
    12     return s*fh;
    13 }
    14 LL Gcd(LL aa,LL bb){if(bb==0)return aa;else return Gcd(bb,aa%bb);}
    15 void dfs(LL k)
    16 {
    17     if(k>R)return;
    18     if(k>0)cc[++lc]=k;
    19     dfs(k*10+2);
    20     dfs(k*10+9);
    21 }
    22 void dfs(LL ii,LL x,LL y,LL gs,LL lcm)
    23 {
    24     LL i,LCM;
    25     if(x<lcm&&y<lcm)return;
    26     if(gs>0)
    27     {
    28         if(gs%2!=0)sum+=((LL)(y/lcm)-(LL)(x/lcm));
    29         else sum-=((LL)(y/lcm)-(LL)(x/lcm));
    30     }
    31     if((ii+1)>lc)return;
    32     for(i=ii+1;i<=lc;i++)
    33     {
    34         if(vis[i]==false)
    35         {
    36             vis[i]=true;
    37             LCM=lcm;
    38             lcm=(lcm*cc[i])/Gcd(lcm,cc[i]);
    39             if(gs==0)lcm=cc[i];
    40             dfs(i,x,y,gs+1,lcm);
    41             lcm=LCM;
    42             vis[i]=false;
    43         }
    44     }
    45 }
    46 LL calc(LL L,LL R)
    47 {
    48     sum=0;
    49     memset(vis,false,sizeof(vis));
    50     dfs(0,L-1,R,0,1);
    51     return sum;
    52 }
    53 int main()
    54 {
    55     LL len,i;
    56     L=read();R=read();
    57     lc=0;
    58     dfs(0);
    59     sort(cc+1,cc+lc+1);
    60     len=unique(cc+1,cc+lc+1)-(cc+1);
    61     lc=len;
    62     for(i=1;i<=lc/2;i++)swap(cc[i],cc[lc-i+1]);
    63     printf("%lld",calc(L,R));
    64     return 0;
    65 }
     
  • 相关阅读:
    HTML5 WebSocket 技术介绍
    腾迅平台接入笔记
    Windows 2008 R2 64位上安装wamp失败的原因
    海伦公式
    ANE接入平台心得记录(安卓)
    ANE原生代码的调试(安卓)
    一行代码远离Google浏览器兼容问题的困扰
    U3D的飞船太空射击例子中,使用coroutine
    这几天在搞UNITY3D,感觉回到了AS2
    网页动物园2.0发布,经过几个月的努力,采用JAVA编写!
  • 原文地址:https://www.cnblogs.com/Var123/p/5317898.html
Copyright © 2011-2022 走看看