站外题求助
  • 板块题目总版
  • 楼主NightTide
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/6/7 14:42
  • 上次更新2023/10/27 23:48:28
查看原帖
站外题求助
547908
NightTide楼主2022/6/7 14:42

题目描述

已知 nn 个数,求 11 ~ tt 中有多少个数不是 nn 个数中任何一个数的倍数

输入格式

第一行两个整数 nntt,第二行 nn 个整数

这是我用容斥原理写的代码,其中 num[i]num[i] 表示由 ii 个输入的数据相乘得到的数,但是 WA 了,求大佬帮我看看。原题是上海市计算机学会组办的6月月赛乙组最后一题

#include<bits/stdc++.h>
#define MAXN 30
using namespace std;
typedef long long ll;
ll n, t, ans;
ll a[MAXN];
vector<ll> num[MAXN];
void dfs(ll step, ll sum, ll cnt){
    if(step > n){
        num[cnt].push_back(sum);
        return ;
    }
    dfs(step + 1, sum, cnt);
    dfs(step + 1, sum * a[step], cnt + 1);
}
int main(){
    scanf("%lld%lld",&n,&t);
    for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
    dfs(1, 1, 0);
    for(int i = 1; i <= n; i++){
        for(int j = 0; j < num[i].size(); j++){
            if(i % 2 == 1) ans += t / num[i][j];
            else ans -= t / num[i][j];
        }
    }
    printf("%lld\n",t - ans);
    return 0;
}
2022/6/7 14:42
加载中...