2393: Cirno的完美算数教室 容斥原理

来源:互联网 发布:觉醒字幕组知乎 编辑:程序博客网 时间:2024/05/16 05:21

这题好像做过一次。。想复习一下容斥原理。。
qwq其实自己随便yy一下就好了。。没什么好复习的。。

#include<iostream>#include<cstdio>#include<algorithm>#define ll long long using namespace std;int l,r,cnt,tot;ll ans;ll a[2005],b[2005];bool vis[2005];inline void pre(ll x){    if (x>r) return;    a[++cnt]=x;    pre(x*10+2); pre(x*10+9);}ll gcd(ll a,ll b){    return b==0?a:gcd(b,a%b);}void dfs(int x,int y,ll z){    if (x>tot)    {        if (y&1) ans+=r/z-(l-1)/z;        else if (y) ans-=r/z-(l-1)/z;        return;    }    dfs(x+1,y,z);    ll tmp=b[x]*z/gcd(b[x],z);    if (tmp<=r) dfs(x+1,y+1,tmp);}int main(){    scanf("%d%d",&l,&r);    pre(2); pre(9);     sort(a+1,a+cnt+1);    for (int i=1;i<=cnt;i++)        if (!vis[i])        {            b[++tot]=a[i];            for (int j=i+1;j<=cnt;j++)                if (!(a[j]%a[i])) vis[j]=1;        }    dfs(1,0,1);    cout << ans << endl;    return 0;}
0 0
原创粉丝点击