UESTC - 1544 当咸鱼也要按照基本法 组合数学 容斥原理

http://acm.uestc.edu.cn/#/problem/show/1544

考虑一下2、2、2这样的情况。答案应该是n / 2

如果只选一个的情况下,对答案的贡献是正的,但是这里有三个,也就是我们统计了3 * n / 2,统计多了。

那么对于任选两个数的情况,有三种,(2, 2) * 3,分别都是不同位置的2,

/**************************************/

我做的时候是发现,先讨论只有

2、2的情况,也就是只有两个数的时候,ans = 0,这个时候,先模拟上面的,只选一个,答案是2 * n / 2

那么枚举两个数的情况,应该就是要ans -= 2 * n / (lcm(2, 2))

要减2倍,不然答案不是0.

/**************************************/

那么上面也是,有三种(2, 2)的情况,ans -= 3 * 2 * n / (lcm(2, 2))

那么现在是-3 * n / (lcm(2, 2))

然后还有一种的就是枚举三个的情况,要使答案是n / 2,那么应该加上4 * n / (lcm(2, 2))

然后得到的规律是1 << (sel - 1),sel是选的数字个数。

完全是瞎比比的,数学不好。

#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>
int n, has;
const int maxn = 15 + 20;
int arr[maxn];
LL ans;
LL LCM(LL a, LL b) {
    return a / __gcd(a, b) * b;
}
void dfs(int cur, int sel, LL theLcm) {
    if (theLcm > n) return;
    if (cur == has + 1) {
        if (!sel) return;
        if (sel & 1) {
            ans += (1 << (sel - 1)) * (n / theLcm);
        } else {
            ans -= (1 << (sel - 1)) * (n / theLcm);
        }
        return;
    }
    dfs(cur + 1, sel, theLcm);
    dfs(cur + 1, sel + 1, LCM(theLcm, arr[cur]));
}
void work() {
    ans = 0;
    scanf("%d%d", &n, &has);
    for (int i = 1; i <= has; ++i) {
        scanf("%d", &arr[i]);
    }
    dfs(1, 0, 1);
    cout << ans << endl;
}

int main() {
#ifdef local
    freopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endif
    int t;
    scanf("%d", &t);
    while (t--) work();
    return 0;
}

还有就是数据中没有15个大质数这样的情况,数据比较弱。

时间: 2024-11-15 20:03:03

UESTC - 1544 当咸鱼也要按照基本法 组合数学 容斥原理的相关文章

【容斥原理】CDOJ - 1544 - 当咸鱼也要按照基本法

众所周知zhu是一个大厨,zhu一直有自己独特的咸鱼制作技巧. tang是一个咸鱼供应商,他告诉zhu在他那里面有NN条咸鱼(标号从1到N)可以被用来制作. 每条咸鱼都有一个咸鱼值KiKi,初始时所有KiKi都是00. zhu是一个特别的人,他有MM个咸数(咸鱼数字), 对于每个咸数xx,他都会让所有满足标号是xx倍数的咸鱼的咸鱼值异或上11. zhu现在想知道经过了这MM个咸数的筛选之后,最终有多少条的咸鱼的咸鱼值是11? Input 输入的第一行包含一个整数TT,表示有TT组数据. 对于每组

UESTC 1960 咸鱼自画像 构造哈密顿通路

题目:http://www.qscoj.cn/#/problem/show/1960 有向图完全图是竞赛图. 定理: 竞赛图一定存在哈密顿路径 竞赛图存在哈密顿回路 充要条件是强连通. 构造方法一共3种 加到头 加到尾 插到中间 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm&g

UESTC 1970 咸鱼咸鱼咸

题目:http://www.qscoj.cn/#/problem/show/1970 本题就是求一个图的欧拉通路或者欧拉回路 用圈套圈算法跑一遍就行了 但是dfs的时候会爆栈,所以需要改成非递归形式 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<

2016 UESTC Training for Dynamic Programming

2016 UESTC Training for Dynamic Programming A - 柱爷与咸鱼神功 题意: 柱爷有n(<=5000)点心情去学m(<=5000)个招式,每个招式会得到一定的修炼值,但要消耗一定的心情,求最多的修炼值. 题解: 0.这是一个裸的背包问题,用每一个物品去更新每一种背包的状态. 1.状态定义:dp[i]表示用i点心情得到的最多修炼值. 2.状态转移:dp[i] = max{dp[i-v[j]]+w[j]} 代码: 1 2 3 4 5 6 7 8 9 10

2016 UESTC Training for Data Structures

2016 UESTC Training for Data Structures A - 卿学姐与公主 题意: 有两个操作一个是单点造成攻击,第二个是求区间最大值. 题解: 0.裸的线段树操作,不过zkw线段树显然更好. 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 1000

B - 卿学姐与基本法 (离散化+成段更新+区间求和)

卿学姐与基本法 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status “做专题也要按照基本法” 离开了诡异的村庄,卿学姐来到了威廉·圣·乱七八糟王国,这里的国王咸鱼王是个智障. 国家涣散,盗贼四起,民不聊生. 见到这样的景象,卿学姐不禁潸然泪下,“悠悠苍天,奈何苦了苍生”. 自幼学习基本法的卿学姐决定向整个国家普及基本法,改善国家法度. 在这个国家总共有N

卿学姐与基本法 (线段树+离散化)

“做专题也要按照基本法” 离开了诡异的村庄,卿学姐来到了威廉·圣·乱七八糟王国,这里的国王咸鱼王是个智障. 国家涣散,盗贼四起,民不聊生. 见到这样的景象,卿学姐不禁潸然泪下,“悠悠苍天,奈何苦了苍生”. 自幼学习基本法的卿学姐决定向整个国家普及基本法,改善国家法度. 在这个国家总共有NN个人,每个人都有一个编号,编号从1开始. 由于整个国家的人实在是太多了,卿学姐每次只能对一个连续区间的编号的人普及基本法. 同时卿学姐还想知道在某个时刻某个区间还有多少人没有被普及基本法. Input 第一行两

UESTC 电子科大专题训练 数据结构 D

UESTC 1584 题意:平面坐标上有n个怪物,每个怪物有一个rank值,代表x坐标和y坐标都不大于它本身的怪物数(不包括本身) 思路:对x y坐标从小到大排序,x优先排序,用数状数组计算y坐标小于它的数量 AC代码: #include "iostream" #include "string.h" #include "stack" #include "queue" #include "string" #i

COGS基本法初稿

COGS基本法 序言 我们COGS人民,为建立更完善的联盟,树立正义,保障网络安宁,提供公共OJ,杜绝极少数恐怖分子对我OJ的破坏行为,并使我们自己和OIER得享自由的幸福,特为COGS制定本基本法. 第一条权利机构 权利机构由老常为领导核心的第一代领导集体及COGS QQ群的元老组成,COGS的权力机构为君主立宪制,其中老常为世袭君主,议会由首相刘易铖,长老王梦迪,内阁大臣张灵犀,外交大臣张子昂.国家工程师李冬麟组成.首相.内阁大臣.外交大臣必须由河南省实验中学有着良好素质和学习水平的学生组成