【每日一题】3月23日[SCOI2010]幸运数字

[SCOI2010]幸运数字

https://ac.nowcoder.com/acm/problem/20278

题意

我们称含6和8的号码是“幸运号码”凡是幸运号码的倍数都称为“近似幸运号码”

求一个区间里的“近似幸运号码”个数

直接暴力找到所有的“幸运号码”然后其他的数就一定是这些数的倍数 我们从小到大sort一下 然后找这些数的倍数

然后对这些数进行容斥 统计答案即可

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; typedef unsigned long long ull; typedef long double ld;
const ll MOD = 1e9 + 7;
inline ll read() { ll s = 0, w = 1; char ch = getchar(); for (; !isdigit(ch); ch = getchar()) if (ch == '-') w = -1; for (; isdigit(ch); ch = getchar())    s = (s << 1) + (s << 3) + (ch ^ 48); return s * w; }
inline ll gcd(ll x, ll y) { return y ? gcd(y, x % y) : x; }
const int N = (1 << 11) + 7;
const int INF = 0x3f3f3f3f;

struct node{
    ll val;
    int id;
};
bool cmp(node a , node b){
    return a.val < b.val;
}
ll n , m ;
ll tot , a[N] , cnt , flag[N];

void dfs(ll x){
    if(x > m)    return ;
    a[++tot] = x;
    dfs(x * 10 + 6);
    dfs(x * 10 + 8);
}

ll ans = 0;

void dfs1(int dep , int sz , ll now){
    if(now > m)    return ;
    if(dep == cnt + 1){
        ll tmp = m / now - (n - 1) / now;
        if(sz & 1)    ans += tmp;
        else ans -= tmp;
        return ;
    }
    if(m >= 1.0 * now / gcd(now , a[dep]) * a[dep])
        dfs1(dep + 1 , sz + 1 , now / gcd(now , a[dep] )* a[dep]);
    dfs1(dep + 1 , sz , now);
}

void solve(){
    n = read() , m = read();
    dfs(6) , dfs(8);
    for(int i = 1 ; i <= tot ; ++i){
        for(int j = 1 ; j <= tot ; ++j){
            if(a[i] > a[j] && a[i] % a[j] == 0)
                flag[i] = 0;
        }
    }
    for(int i = 1 ; i <= tot ; ++i){
        if(!flag[i])    a[++cnt] = a[i];
    }
    sort(a + 1 , a + cnt + 1 , greater<ll>());
    for(int i = 1 ; i <= cnt ; ++i)
        dfs1(i + 1 , 1 , a[i]);
    cout<<ans<<endl;
}

int main(void){
    solve();

    return 0;
}
每日一题 文章被收录于专栏

写每日一题呀

全部评论

相关推荐

暑期是进不了大厂了想问问前端友友们&nbsp;,后面应该如何沉淀自己,我想秋招再冲一下尤其是八股,应该抓哪一块是重点,理解到什么程度呢,要学到什么深度才能抗住拷打。还有场景题如何去准备。期待友友们的解答。
命烈焰带我飞走:找个中厂小厂先看看吧,去了熟悉熟悉项目,简历上扒点东西,之后刷刷sobb上百度美团快手的日常实习,流程都比较快轮次也少,别给自己太大压力,一步一步来,先不用想着暑期,转正,秋招那些事情,另外如果可能的话可以关注下面试时候的形象,穿搭,环境这些,其实实习主要就是看个眼缘,看着好看声音好听其实加分不少..八股这些不要死记硬背,挨个拿去问问chatgpt,这个东西做出来是为了解决什么问题,有啥效果,自己有想法有个模糊的概念就可以了,人家也知道你是学生,实习生没有什么kpi,放你去面都是希望能把你招进去的,场景题算法题没做过你可以边试着写边跟面试官说你的想法思路,也可以直说没见过让他们给你提示,反正最后都是与或非顺序分支循环存取值那套。总之建议是别为了秋招..出去旅旅游放松放松,少投几家少背八股多写写代码
点赞 评论 收藏
分享
FieldMatching:看成了猪头顾问,不好意思
点赞 评论 收藏
分享
勤奋努力的椰子这就开摆:这些经历跟硬件都没啥关系呀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务