题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853

容斥原理的应用。

发现十位的话只有2047个只含6或8的数,故可以存。它们的倍数个数只要到时候用边界除以一下就行了。

但容斥原理是指数级别的。故剪枝:

  因为比 r 大的 lcm 就没用了。故若当前的累计lcm已经大于r,因为越乘越大,故直接剪掉。

  怎样考虑顺序才能使剪枝更有效呢?

  在每一层都有两种情况:选当前元素和不选当前元素。一直递归到序号大于n时更新答案并return;

  也就是排在前面的元素改一下,就把它后面的元素的种种状况都考虑完,之后再改一下这个前面的元素,再……

  若从小到大排序,则经过种种状态到达很后面一个位置时突然发现超过了r,于是回溯;这样会把“前面的种种状态”都遍历一遍,每次到了这儿回溯;

  但若从大到小排序,则原来的“前面的种种状态”变成了“后面的种种状态”,一旦在此return,就不会遍历后面了,剪枝变得更有效了。

  也就是值越大,越容易使累计的lcm越过r,所以把值大的放在前面,就可以使剪枝更有效。

  似乎因为很容易就越过r了,所以加了剪枝就可以轻松过了。

小注意:lcm算出来的话似乎会爆long long,但可以用long long记在参数里。所以是先求一个tmp,再用double比较。(虽然double精度有点低)。

    但有一个很好的方法!就是不比较 a[k] * tmp <=r,而是比较 tmp <= r / a[k] !这样就肯定不会爆了~

但:本代码中所有都是 l l。另有把计数的k,cnt之类写成int的(只有这一点区别),就RE了。真是不明所以。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
ll l,r,a[],b[],m,n,ans;
bool er[];
void pre(ll k)
{
if(k>r)return;
a[++m]=k;
pre(k*+);
pre(k*+);
}
ll gcd(ll u,ll v)
{
return v==?u:gcd(v,u%v);
}
void dfs(ll k,ll cnt,ll z)//第k号 选了cnt个元素 之前的lcm为z
{
if(k>n)
{
if(!cnt)return; //////
if(cnt&)ans+=r/z-(l-)/z;
else ans-=r/z-(l-)/z;
return;
}
dfs(k+,cnt,z);
ll tmp=z/gcd(a[k],z);
if((double)a[k]*tmp<=r)dfs(k+,cnt+,a[k]*tmp);
}
int main()
{
scanf("%lld%lld",&l,&r);
pre();pre();
sort(a+,a+m+);
for(ll i=;i<=m;i++)
if(!er[i])
{
for(ll j=i+;j<=m;j++)
if(a[j]%a[i]==)er[j]=;
b[++n]=a[i];
}
for(ll i=;i<=n;i++)
a[i]=b[n-i+];
dfs(,,); ///z=1
printf("%lld",ans);
return ;
}

最新文章

  1. 基于Caffe的Large Margin Softmax Loss的实现(上)
  2. ios之JavaScript
  3. view not attached to windows manager与This Toast was not created with Toast.makeText()
  4. mongodb的监控与性能优化
  5. SVN 提交必填备注Commit
  6. google(转帖)
  7. asp.net + Jquery 实现类似Gridview功能 (一)
  8. Chrome浏览器扩展开发系列之十八:扩展的软件国际化chrome.i18n API
  9. 4、公司经营的业务来源 - CEO之公司管理经验谈
  10. 我的linux学习之路——(一)
  11. MUI版本升级更新程序IOS和andriod
  12. Linux系统安装jdk教程
  13. 纸小墨ink简洁主题story爱上你的故事
  14. SecureCRT两步验证自动登录脚本
  15. 工作随笔—Elasticsearch大量数据提交优化
  16. 谈谈IE针对Ajax请求结果的缓存
  17. Codeforces Round #425 (Div. 2) Problem A Sasha and Sticks (Codeforces 832A)
  18. 7.4 C++标准模板库(STL)的概念
  19. 21 week4 submit buidAndRun() node-rest-client
  20. SSM实战——秒杀系统之DAO层实体定义、接口设计、mybatis映射文件编写、整合Spring与Mybatis

热门文章

  1. OncePerRequestFilter的作用
  2. 44. Wildcard Matching *HARD*
  3. 信号处理signal、sigaction、pause、信号嵌套处理、不可重入函数
  4. memory prefix retro,re out 2
  5. js通过class获取元素
  6. windows7如何查看端口被占用
  7. 猎豹浏览器(chrome内核)屏蔽视频广告
  8. oracle查询在当前数据库下当前用户拥有的表语句
  9. 玩转X-CTR100 l STM32F4 l W25Q64 SPI串行FLASH存储
  10. 玩转X-CTR100 l STM32F4 l 红外遥控接收