BZOJ 1853 [Scoi2010]幸运数字

原创 2016年08月28日 17:56:11

容斥原理。

[l,r]6S18S266S368S4......

21+22+...+210=2112=2046,

66666666943

搜索的时候从数字大的数开始搜索,以减少回溯层数,否则TLE。

求LCM的时候可能爆longlong,要用double- -

时间复杂度O(玄学)…

#include<cstdio>
#include<algorithm>
using namespace std;
const double eps = 1e-3;
int m;
long long l, r, a[3000], ans;
bool vis[3000];
void pre(long long x)
{
    if(x>r)return;
    a[++m]=x;
    pre(x*10+6);
    pre(x*10+8);
}
bool cmp(long long a,long long b){return a>b;}
long long gcd(long long a, long long b){return b==0?a:gcd(b,a%b);}
void dfs(int now, int cnt, long long x)
{
    if(now>m)
    {
        if(cnt&1)ans+=r/x-(l-1)/x;
        else if(cnt)ans-=r/x-(l-1)/x;
        return;
    }
    long long tmp=x/gcd(a[now],x);
    dfs(now+1,cnt,x);
    if((double)a[now]*tmp<=r+eps)
        dfs(now+1,cnt+1,tmp*a[now]);
}
int main()
{
    scanf("%lld%lld",&l,&r);
    pre(6);pre(8);
    sort(a+1,a+1+m,cmp);
    for(int i = m; i >= 1; i--)
        if(!vis[i])
            for(int j = i-1; j >=1; j--)    
                if(a[j]%a[i]==0)
                    vis[j]=1;
    int tmp=0;
    for(int i = 1; i <= m; i++)
        if(!vis[i])
            a[++tmp]=a[i];
    m=tmp;
    dfs(1,0,1);
    printf("%lld\n",ans);
}
版权声明:本文为蒟蒻原创文章,应该没什么人会转载的,要转载就注明出处顺便吱一声吧。

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

BZOJ1853 [Scoi2010]幸运数字 容斥原理
  • wzq_QwQ
  • wzq_QwQ
  • 2015年09月23日 21:00
  • 1199

【SCOI2010】【BZOJ1853】幸运数字

随便rand出一道题没想到这么可怕QAQ 之前没写过容斥的题 写这个题是第一次 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸...
  • CreationAugust
  • CreationAugust
  • 2015年02月07日 10:43
  • 1129

bzoj1853【SCOI2010】幸运数字

容斥原理+搜索剪枝
  • AaronGZK
  • AaronGZK
  • 2016年05月27日 23:23
  • 3133

【bzoj1853】【Scoi2010】【幸运数字】【搜索】

Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号...
  • sunshinezff
  • sunshinezff
  • 2016年01月06日 17:09
  • 226

bzoj1853【scoi2010】幸运数字(暴力出奇迹)

时间限制:2秒 内存限制:128M 【问题描述】   在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68...
  • qq_35546274
  • qq_35546274
  • 2017年03月14日 21:34
  • 267

BZOJ 1853 [Scoi2010]幸运数字 (容斥原理)

1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 1591  Solved: 568 [Submit][St...
  • u013967323
  • u013967323
  • 2015年10月28日 15:45
  • 318

bzoj1853: [Scoi2010]幸运数字(容斥原理)

题目传送门 这道题。。 数据有点强啊。。。。解法: 我好垃圾我一开始的想法如下: 先把幸运数字都求出来。。 然后用容斥原理去搜。。 奇数个的时候就加上答案,偶数个的时候就减去答案。结果。。...
  • Hanks_o
  • Hanks_o
  • 2017年11月22日 13:31
  • 73

【bzoj1853】 Scoi2010—幸运数字

http://www.lydsy.com/JudgeOnline/problem.php?id=1853 (题目链接)今天考试考了容斥,结果空知道结论却不会写= =题意:求区间中不含6,8两个数字及由...
  • MashiroSky
  • MashiroSky
  • 2016年08月04日 20:30
  • 237

【bzoj1853】【scoi2010】幸运数字

1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 2269  Solved: 829 [Submit][...
  • liu_cheng_ao
  • liu_cheng_ao
  • 2017年02月13日 09:56
  • 94

BZOJ 1853: [Scoi2010]幸运数字

暴力搞搞,容斥原理 因为会爆longlong所以要换成double 先暴力预处理出
  • bababaab
  • bababaab
  • 2016年08月01日 09:57
  • 481
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ 1853 [Scoi2010]幸运数字
举报原因:
原因补充:

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