bzoj 2393(容斥原理)

原创 2016年08月30日 19:28:17

2393: Cirno的完美算数教室

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 394  Solved: 231
[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


解题思路:先可以枚举出baka数,然后再删掉两两可以整除的。

然后在dfs,加点剪枝,就是当lcm>r时直接退出。


#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
long long l,r,len,cnt,ans;
long long q[2000],g[2000];
bool b[2000];


inline long long read()
{
char y; long long x=0,f=1; y=getchar();
while (y<'0' || y>'9') {if (y=='-') f=-1; y=getchar();}
while (y>='0' && y<='9') {x=x*10+int(y)-48; y=getchar();}
return x*f;



long long gcd(long long a,long long b)
 {
  if (b==0) return a;
 else return gcd(b,a%b);
 }


void dfs(long long sum)
 {
  if (sum>r) return;
if (sum!=0)++len,q[len]=sum;
  dfs(sum*10+2);
  dfs(sum*10+9);
 }


void work(long long sum,int ge,int now)
 {
  if (sum>r) return;
  if (now==cnt+1)
  {
   if (sum!=1) {if (ge%2==1)ans+=r/sum-(l-1)/sum; else ans-=r/sum-(l-1)/sum;}
   return;
}
    long long ogg=gcd(sum,g[now]);
    work(sum*g[now]/ogg,ge+1,now+1);
    work(sum,ge,now+1);
 }


int main()
{
l=read(); r=read();
dfs(0);
memset(b,true,sizeof(b));
for (int i=1;i<=len;++i)
for (int j=1;j<=len;++j)
 if (i!=j && q[i]%q[j]==0) b[i]=false;
for (int i=1;i<=len;++i)
if (b[i])
 {
  ++cnt; g[cnt]=q[i];
 }
ans=0;
work(1,0,1);
printf("%lld",ans);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

BZOJ 2393 Cirno的完美算数教室 容斥原理+DFS

警告:网上的题解都是误人子弟,看此篇题解之前请将脑海中对其它写于本题解之前的网上常见题解的印象全部消除之后方可阅读 此题的数据范围是10^9 但是10^10一样可以做 不影响 首先我们可以预处理出...

[BZOJ2393]Cirno的完美算数教室(容斥原理+DFS)

ATP的同学们明天就要去期中考试了然而ATP并不用考嘿嘿嘿。。(丧心病狂不要face= =)

bzoj 2393 & bzoj 1853 容斥原理

我觉得我写不出更合适的题解了:http://www.2cto.com/kf/201412/359333.html var l,r,n,m :longint; ...

bzoj2393 Cirno的完美算数教室

容斥原理+搜索剪枝

BZOJ 3198 Sdoi2013 spring Hash+容斥原理

题目大意:给定n个元素,每个元素是一个六元组,求有多少对元素满足相同的位置恰好有k个 首先对于恰好有K个这种东西果断考虑容斥原理 我们2^6枚举相同的位置 恰好有k个元素相同的对数=至少有k个位...

[BZOJ2669][cqoi2012][状压DP][容斥原理]局部极小值

去年暑假就见过这道题,觉得太难就扔到一边,这几天上课讲到就填上这个坑考虑状压DP,因为普通DP出来的方案数中会存在局部最小值大于给定数量的情况,所以要dfs出所有情况然后容斥#include #in...

bzoj 4487: [Jsoi2015]染色问题 (容斥原理+组合数学)

题目描述传送门题目大意:棋盘是一个n×m的矩形,分成n行m列共n*m个小方格。现在萌萌和南南有C种不同颜色的颜料,他们希望把棋盘用这些颜料染色,并满足以下规定: 1. 棋盘的每一个小方格既可以染...

bzoj1042 硬币购物 容斥原理

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1042 Description  硬币购物一共有4种硬币。面值分别为c1,c2,c3,c4...

bzoj 4596: [Shoi2016]黑暗前的幻想乡 (矩阵树定理+容斥原理)

题目描述传送门题目大意:n个点要修n-1条路(形成一棵树)。有n-1个公司,每个公司可以修建某些路径。求每个公司恰好修建一条路的方案数。题解生成树计数一般都是用基尔霍夫矩阵求行列式来做,关键是怎么解决...

BZOJ 2301 HAOI2011 Problem b 容斥原理+莫比乌斯反演

题目大意:多次询问有多少个数对(x,y)满足a 首先利用容斥原理将询问分解 问题转化为求有多少个数对(x,y)满足x 这里就可以利用到莫比乌斯反演: 我们令F(d)为GCD(x,y)=d...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)