2020年牛客算法入门课练习赛3 B

2020年牛客算法入门课练习赛3 B

传送门

题意:给你一个区间[L,R]和长度为n一个数组(n<=15),考虑这个区间里有多少个数能被8整除,并且无法被这个数组中任何一个数字整除。

分析:由于要考虑不能被一个数组中的任何一个元素进行整除,并且数组中的数字比较大。个人感觉写数位dp是没有前途的。由于数组比较小,所以考虑容斥,在求LCM的时候,一个一个求就好。

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 20;

LL a[N], l, r, n, ans;

int solve(int x){
    int ans=x/8;
    for(int id=1;id<(1<<n);++id){
        LL num=8;
        int cnt=0;
        for(int i=0;i<n;++i){
            if(id>>i&1){
                ++cnt;
                num=num*a[i]/__gcd(num,a[i]);
            }
            if(num>x)break;
        }
        if(num>x)continue;
        if(cnt&1){
            ans-=x/num;
        }else{
            ans+=x/num;
        }
    }

    return ans;
}

int main(){
    scanf("%d",&n);
    for(int i=0;i<n;++i)scanf("%d",a+i);
    scanf("%d%d",&l,&r);
    printf("%d",solve(r)-solve(l-1));
    return 0;
}

posted @   John_Ran  阅读(116)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示