题目描述

CirnoCirnoCirno发现了一种bakabakabaka数,这种数呢只含有222和999两种数字

现在CirnoCirnoCirno想知道[L,R][L,R][L,R]中有多少个数能被bakabakabaka数整除

1&lt;L&lt;R&lt;10101&lt;L&lt;R&lt;10^{10}1<L<R<1010

题目分析

由于R&lt;1010R&lt;10^{10}R<1010,最大只有10位的数可以对答案造成贡献,每一位只能为2/9,所以最多有2000多个数,再加上把是之前的数的倍数的除去,最后只有900多个。考虑容斥,用被1个整除的-被2个整除的+被3个整除的…

由于此时间复杂度是29002^{900}2900,所以在dfs时剪枝就行,判断当前lcm是否大于R,同时注意lcm可能爆Longlong,还要判断小于0,否则跑不出[1,1010][1,10^{10}][1,1010]这组数据(虽然也能过且R&lt;1010R&lt;10^{10}R<1010)

考试时想到过此做法,以为剪枝效率不高过不了,就写了大暴力去写T3了…最后只有20pts

AC code
#include <bits/stdc++.h>
using namespace std;
#define LL long long
LL L, R, Ans, num[2500], tot;
bool used[2500]; void init()
{
int Len = int(log10(R))+1;
for(int i = 1; i <= Len; ++i)
for(int j = 0; j < (1<<i); ++j)
{
LL now = 1; num[++tot] = 0;
for(int k = 0; k < i; ++k)
num[tot] += ((j&(1<<k)) ? 9 : 2) * now, now *= 10;
if(num[tot] > R) { tot--; continue; }
for(int k = 1; k < tot; ++k)
if(num[tot] % num[k] == 0)
{ tot--; break; }
}
} inline LL gcd(LL a, LL b) { return b ? gcd(b, a%b) : a; } inline void dfs(int now, int cf, LL tmp) //当前数的编号,容斥系数,当前lcm
{
if(tmp > R || tmp <= 0) return;
if(now > tot)
{
if(tmp == 1) return;
Ans += cf * (R/tmp - L/tmp);
return;
}
dfs(now+1, cf, tmp);
dfs(now+1, -cf, tmp/gcd(tmp,num[now])*num[now]);
} int main ()
{
scanf("%lld%lld", &L, &R), --L, init(), dfs(1, -1, 1);
printf("%lld\n", Ans);
}

[bzoj 2393] Cirno的完美算数教室 (容斥原理+dfs剪枝)的更多相关文章

  1. Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜

    2393: Cirno的完美算数教室 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 287  Solved: 175[Submit][Status][ ...

  2. bzoj 2393 Cirno的完美算数教室(容斥原理+搜索)

    [题意] 定义C数为只包含数字2和9的数,求[L,R]内能被C数整除的个数. [思路] Dfs预处理出C数,并去除其中倍数的情况. Dfs搜索出现情况,奇数加,偶数减,当数值大于R时剪枝. [代码] ...

  3. ●BZOJ 2393 Cirno的完美算数教室

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2393 题解: 容斥原理,暴力搜索,剪枝...和 [Scoi2010 幸运数字] 一样的(只是 ...

  4. BZOJ 2393 Cirno的完美算数教室

    就是爆搜嘛. 先从大到小排个序能减去dfs树上很大的一部分.这个技巧要掌握. #include<iostream> #include<cstdio> #include<c ...

  5. 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1817  Solved: 665[Submit][Status] ...

  6. bzoj 1853: [Scoi2010]幸运数字&&2393: Cirno的完美算数教室【容斥原理】

    翻了一些blog,只有我用状压预处理嘛2333,.把二进制位的0当成6,1当成8就行啦.(2393是2和9 然后\( dfs \)容斥,加上一个数的\( lcm \),减去两个数的\( lcm \), ...

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

    传送门 先通过dfs预处理出来所有只有2和9的数,也就大概2000多个. 想在[L,R]中找到是这些数的倍数的数,可以通过容斥原理 那么如果a % b == 0,那么便可以把 a 去掉,因为 b 的倍 ...

  8. BZOJ2393: Cirno的完美算数教室

    2393: Cirno的完美算数教室 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 138  Solved: 83[Submit][Status] D ...

  9. 【bzoj2393】【Cirno的完美算数教室】容斥原理的剪枝应用

    (上不了p站我要死了,侵权度娘背锅) 在用容斥定理时,常常会用到dfs的形式,如果枚举完所有的情况可能会超时,其剪枝的优化很是重要. Description ~Cirno发现了一种baka数,这种数呢 ...

随机推荐

  1. quartz定时任务存储

    今天不聊quartz的概念,像任务bean,触发器,调度器这些随随便便都可以百度到,其中任务bean要实现job接口.对于这些创建生成的定时任务,它可以保存在内存中,重启失效,也可以保存在数据库里重启 ...

  2. java多线程中篇(二) —— 线程的创建和Synchronized锁关键字

    学习之前,先了解线程状态图 说明:线程共包括以下5种状态. 1. 新建状态(New)         : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread ...

  3. 【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name

    在使用客户端调用服务端的时候发生了2 counts of IllegalAnnotationExceptions Two classes have the same XML type name的错误, ...

  4. Python socket 编程(1)

    服务端的创建: import socket server = socket.socket() # 创建一个socke对象 server.bind(('192.168.101.5', 8001)) # ...

  5. Hibernate常用api以及增删改查

    一   .API的定义 所谓的API全称就是(Application Programming Interface,应用程序编程接口).就是类库对外提供的接口.类.枚举.注解等元素. 如:JDK API ...

  6. 天梯赛 L3-002. 堆栈

    思路:这里的线段树维护一个区间里面出现数的个数,对于Pop,push单点更新一下就好. #include<stdio.h> #include<iostream> #includ ...

  7. c#使用GDI进行简单的绘图

    https://www.2cto.com/database/201805/749421.html https://zhidao.baidu.com/question/107832895.html pr ...

  8. Suricata Rules

    Suricata Rules https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Suricata_Rules https ...

  9. element-ui里的form校验,一直有点疑惑,prop是怎么对应的?

    图一 图一中红框内的这种校验,必须在 这个product_form数据域内定义对应的变量名(cid.itemName......),不然对应不上. 图一红框外的那种校验,则不用在数据域内定义对应的变量 ...

  10. html中标签的英文含义!

    html中的标签缩写的英文是什么?  标签  英文全称  含义 ul unordered lists 无序列表 li list item 列表项目 ol ordered lists 有序列表 dl d ...