vijos P1629八 容斥原理

https://vijos.org/p/1629

注意lcm要用LL

先给一个样例

1

2

1 10

思路、其实这题就是问,给定一堆数,要求不能整除其任意一个的数字有多少个。

容辞 + lcm

dfs暴力枚举每一位选还是不选,一共n位。00010101010.

然后奇减偶加

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;

#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
const int maxn = 15 + 20;
int a[maxn];
int ans;
int L, R, n;
int did(LL val) {
    return (R / val) - ((L - 1) / val);
}
LL lcm(LL a, LL b) {
    return a / __gcd(a, b) * b;
}
void dfs(LL val, int has, int cur) {
    if (val > R) return;
    if (cur == n + 1) {
        if (!has) return;
//        cout << val << endl;
        if (has & 1) {
            ans -= did(val);
        } else ans += did(val);
        return;
    }

//    if (cur > n) return;
    dfs(lcm(val, a[cur]), has + 1, cur + 1);
    dfs(val, has, cur + 1);
}
void work() {
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
        a[i] = lcm(a[i], 8);
//        a[i] *= 8;
    }
//    for (int i = 1; i <= n; ++i) {
//        cout << a[i] << " ";
//    }
//    cout << endl;
    scanf("%d%d", &L, &R);
    ///***debug****
//    int ans1 = 0;
//    for (int i = L; i <= R; ++i) {
//        bool flag = true;
//        if (i % 8 != 0) continue;
//        for (int j = 1; j <= n; ++j) {
//            if (i % a[j] == 0) {
//                flag = false;
//                break;
//            }
//        }
//        if (flag) ans1++;
//    }
//    cout << ans1 << endl;
    ans = did(8);
//    cout << ans << endl;
    dfs(1, 0, 1);
    cout << ans << endl;
}

int main() {
#ifdef local
    freopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endif
    work();
    return 0;
}

时间: 2024-12-19 13:55:18

vijos P1629八 容斥原理的相关文章

Vijos P1360 八数码问题

题目链接:https://vijos.org/p/1360 题目大意: 3x3格子上放1~8数字,一个空位,每次空位可与上下左右交换,固定终止布局,求输入的起始布局需要几步到达终止布局 题目思路: 一眼题BFS,宽搜即可,判重我比较暴力直接把状态记下,没hash.cantor什么的. 1 // 2 //by coolxxx 3 // 4 #include<iostream> 5 #include<algorithm> 6 #include<string> 7 #incl

【vijos】1629 八(容斥原理+dfs)

https://vijos.org/p/1629 本来是想出来了的,,,,但是有个地方写挫了一直没发现,sad 就是dfs的时候我传的pos传错了QAQ 这题用容斥很好想 首先在区间[l, r]能被a整除的数有r/a-(l-1)/a,下取整. 而这题要求的是 其中B是区间内能被8整除的数,Ai分别为能整除所给的数的集合 那么我们用容斥加加减减即可. 同时要注意,算整除a和b的数并不是算a×b的数,而是lcm(a, b) #include <cstdio> #include <cstrin

Vijos 八数码问题

背景 Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们. 描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变. 格式 输入格式 输入初试状态,一行九个数字,空格用0表示 输出格式 只有一行,该行只有一个数字

COGS 513 八

513. 八 http://www.cogs.pro/cogs/problem/problem.php?pid=513 ★☆   输入文件:eight.in   输出文件:eight.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 八是个很有趣的数字啊.八=发,八八=爸爸,88=拜拜.当然最有趣的还是8用二进制表示是1000.怎么样,有趣吧.当然题目和这些都没有关系. 某个人很无聊,他想找出[a,b]中能被8整除却不能被其他一些数整除的数. [输入文件] 第一行一

Vijos P1443 银河英雄传说个人通过/递交:11/25(44%)

题目来源:https://www.vijos.org/p/1443 P1443银河英雄传说 Accepted 标签:NOI2002[显示标签] 描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团点名将杨威利组织麾下三万艘战舰迎敌. 杨威利擅长排兵布阵,巧妙运用各种战术屡次以少胜多,难免恣生骄

Vijos P1103 校门外的树【线段树,模拟】

校门外的树 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种有一棵树. 由于马路上有一些区域要用来建地铁.这些区域用它们在数轴上的起始点和终止点表示. 已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分.现在要把这些区域中的树(包括区域端点处的两棵树)移走.你的任务是计算将这些树都移走后,马路上还有多少棵树. 格式 输入格式 输入的

关于八数码问题中的状态判重的三种解决方法(编码、hash、&lt;set&gt;)

八数码问题搜索有很多高效方法:如A*算法.双向广搜等 但在搜索过程中都会遇到同一个问题,那就是判重操作(如果重复就剪枝),如何高效的判重是8数码问题中效率的关键 下面关于几种判重方法进行比较:编码.hash.set 看到问题初学者最先想到的应该就是用一个vis数组标志一下即可.但是该申请多大的数组呢?一个9维数组(9^9=387420489太大了吧)?如果内存允许这是最高效的办法:O(1) 所以我们现在面临的问题是如何在O(1)的时间复杂度不变的情况下把空间压缩下来: 方法一:编码.解码,我们可

「总结」容斥原理

容斥原理. 最近被容斥虐惨了,要总结一下知识点和写一些题解. 1.容斥原理 首先是很熟悉的奇加偶减的式子. 令$M$为$A$的集合. $$\left|\bigcup\limits_{i=1}^{n}S_i\right|=\sum\limits_{C\subseteq M}^{n}(-1)^{size(C)-1}\left|\bigcap\limits_{T\subseteq C}T\right|$$ 这个式子就是最重要的了. 所有的反演以及容斥系数的确定,原理都是他.这也是容斥原理是原理的原因.

谭八爷代理订货平台系统

谭八爷代理订货平台系统  135.3879.3268   谭八爷微商下单系统.谭八爷微商管理系统.谭八爷代理商下单系统等.模式系统开发 传统行业和内容提供本质没有变,但是在结合互联网后的商业模式和运营模式变了,如当前我们谈的多的O2O,核心不是内容提供变化了,是商业模式变化了,这个商业模式变化本身又依托了一个重要假设,即解决了传统行业原有的信息不对称问题. 谭八爷微商平台系统开发的注册流程是非常简单的--扫码注册.同时后台的功能也很强大,代理们收到顾客订单后可以直接在后台向公司下单,同时后台也会