• [SCOI2010]幸运数字


    一开始以为是数位dp,但是想到什么68,688的倍数怎么求就懵了。。。但是发现只有10位,有1024个幸运数字,我们可以把这些数算出来,容斥原理做一下。

    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    long long l,r,a[10025],cnt,num,b[10025],ans;
    bool vis[10025];
    void pre(long long now) {
      if(now>r) return;
      a[++cnt]=now;
      pre(now*10+6);
      pre(now*10+8);
    }
    bool cmp(long long x,long long y){return x>y;}
    void rongchi(int x,int y,long long z) {
      if(x>num) {
        if(y&1) ans+=r/z-(l-1)/z;
        else if(y)ans-=r/z-(l-1)/z;
        return;
      }
      long long c=b[x]*z/__gcd(b[x],z);
      rongchi(x+1,y,z);
      if(c<=r&&c>0)
      rongchi(x+1,y+1,c);
    }
    int main() {
        scanf("%lld%lld",&l,&r);
        pre(6);pre(8);
        sort(a+1,a+1+cnt);
        for(int i=1;i<=cnt;i++) {
          if(a[i]) {
            b[++num]=a[i];
            for(int j=i+1;j<=cnt;j++)
              if(a[j]%a[i]==0) a[j]=0;
          }
        }
        sort(b+1,b+1+num,cmp);
        rongchi(1,0,1);printf("%lld",ans);
    }
    
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    poj2181 jumping cow
    poj2184
    POJ 1189 钉子和小球
    uva11019矩阵匹配器D316
    noip2015运输计划
    [LintCode] Last Position of Target
    [LintCode] K Closest Points
    [LintCode] K Closest Numbers In Sorted Array
    [LintCode] Closest Number in Sorted Array
    [LintCode] Perfect Squares
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9375392.html
Copyright © 2020-2023  润新知