两题是类似的,这里说一下bzoj1853

首先我们求出所有的幸运号码,注意如果存在x是y的倍数则x不算在内,避免之后重复计算

下面我们就要统计幸运号码的倍数了,这显然是要用到容斥原理的

但是幸运号码很多,如果直接暴力找几个幸运号码的公倍数做容斥原理弄会TLE的;

因此我们想到在搜索中剪枝,如果几个幸运号码的公倍数已经大于r,

那么我们一定不会再用这几个幸运号码和别的幸运号码求公倍数了

为了体现这个剪枝的威力,我们穷举幸运号码的时候应该从大往小搜索;

 var b:array[..] of int64;
    a:array[..] of longint;
    m,t,k,i:longint;
    s,x,l,r,ans:int64;
    f:boolean; function gcd(a,b:int64):int64;
  begin
    if b= then exit(a)
    else exit(gcd(b,a mod b));
  end; procedure dfs(j,t:longint;x:int64);
  var y:int64;
  begin
    if j= then
    begin
      if t mod = then ans:=ans+r div x-(l-) div x  //容斥原理
      else if t> then ans:=ans-r div x+(l-) div x
    end
    else begin
      dfs(j-,t,x);
      y:=x div gcd(b[j],x);
      if double(b[j])*double(y)<=r then  //double是防止爆int64
        dfs(j-,t+,b[j]*y);
    end;
  end; begin
  readln(l,r);
  t:=;
  x:=r;
  while x<> do
  begin
    inc(t);
    x:=x div ;
  end;
  fillchar(a,sizeof(a),);
  m:=;
  while a[]=- do
  begin
    s:=;
    for i:= to t do
      if a[i]= then s:=s*+
      else if a[i]= then s:=s*+;
    if s>r then break
    else if s<> then
    begin
      f:=true;
      for i:= to m do
        if s mod b[i]= then
        begin
          f:=false;
          break;
        end;
      if f then
      begin
        inc(m);
        b[m]:=s;
      end;
    end;
    k:=t;
    while a[k]= do
    begin
      a[k]:=;
      dec(k);
    end;
    inc(a[k]);
  end;
  dfs(m,,);
  writeln(ans);
end.

bzoj1853 bzoj2393的更多相关文章

  1. [转载]hzwer的bzoj题单

    counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...

  2. BZOJ刷题列表【转载于hzwer】

    沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...

  3. BZOJ1853:[SCOI2010]幸运数字 & BZOJ2393:Cirno的完美算数教室——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1853 https://www.lydsy.com/JudgeOnline/problem.php? ...

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

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

  5. 【bzoj1853】 Scoi2010—幸运数字

    http://www.lydsy.com/JudgeOnline/problem.php?id=1853 (题目链接) 今天考试考了容斥,结果空知道结论却不会写→_→ 题意 求区间中不含6,8两个数字 ...

  6. BZOJ1853 [Scoi2010]幸运数字 容斥原理

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1853 题意概括 求一个区间范围内,近似幸运数字的个数. 定义: 幸运数字:仅由6或者8组成的数字. ...

  7. 【BZOJ1853】幸运数字(搜索,容斥)

    [BZOJ1853]幸运数字(搜索,容斥) 题面 BZOJ 洛谷 题解 成功轰下洛谷rk1,甚至超越了一个打表选手 这题思路很明显吧,先搞出来所有范围内的合法数字,然后直接容斥, 容斥的话显然没有别的 ...

  8. BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】

    BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...

  9. 【bzoj1853】: [Scoi2010]幸运数字 数论-容斥原理

    [bzoj1853]: [Scoi2010]幸运数字 预处理出所有幸运数字然后容斥原理 但是幸运数字是2logn个数的 直接搞会炸 所以把成倍数的处理掉 然后发现还是会T 所以数字要从大到小处理会快很 ...

随机推荐

  1. PHP之APC缓存详细介绍

    1.APC缓存简介 APC,全称是Alternative PHP Cache,官方翻译叫"可选PHP缓存".它为我们提供了缓存和优化PHP的中间代码的框架. APC的缓存分两部分: ...

  2. js中 的这些距离你知道吗?

  3. dense_rank()+hash提示改写优化SQL

    数据库环境:SQL SERVER 2005 今天看到一条SQL,返回10条数据,执行了50多S.刚好有空,就对它进行了优化,优化后1S出结果. 先看下原始SQL SELECT t1.line_no , ...

  4. [Twisted] 事件驱动模型

    在事件驱动编程中,多个任务交替执行,并且在单一线程控制下进行.当执行I/O或者其他耗时操作时,回调函数会被注册到事件循环. 当I/O完成时,执行回调.回调函数描述了在事件完成之后,如何处理事件.事件循 ...

  5. 关于iOS元旦http,https的规定,官方论坛回应

    先贴原文地址:https://forums.developer.apple.com/thread/48979#146140 原文: eskimoAug 2, 2016 4:17 AM(in respo ...

  6. 设置lable内容不上下居中

    转载自:http://dong-zsh.github.io/2015/10/14/%E8%AE%BE%E7%BD%AElable%E5%86%85%E5%AE%B9%E4%B8%8D%E4%B8%8A ...

  7. SVM推导

    标准最大margin问题 假设data是linear seperable的 优化目标 希望 margin(w),i.e, 最小的点到直线的距离 最大 即是要得到最右的线,它对噪声的鲁棒性最好 得到的分 ...

  8. LVS高可用集群

    高可用LVS 集群构建 在LVS集群当中Director的作用是很关键的,所以我们在生产环境中要保证其高可用. 高可用架构图: 1.通过 piranha搭建LVS高可用性集群 piranha是REDH ...

  9. grub2 使用memdisk工具 启动任意iso

    root@zhanghua-Inspiron-:/home/zhanghua# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda6 60G 12G 46G 21% / none ...

  10. 【原创】CMD常用命令:解决实际问题

    1.查找某一目录下后缀名文某某的所有文件. 命令格式:dir *.mp3 /a -d/b/s >C:\Users\leemo\Desktop\total.txt MP3为文件后缀名.>是命 ...