
容斥原理
算球?
在校学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu 2204 Eddy's爱好(容斥原理)
问1到N之间有多少个可以表示成M^K(K>1)的数,M^K <= N的个数有M−−√K\sqrt[K]{M}个,如果K是合数,那么M^(a*b)可以表示成(M^a)^b和(M^b)^a,这就出现重复了,所以K一定要是素数,K即使是素数,也会出现重复,比如比如9^3==3^6==27^2,所以还要去掉指数是素数的积(3^6)的情况。因为2^60>1e18,2*3*5*7>60,所以最多枚举三个因子(K原创 2017-08-16 19:17:32 · 263 阅读 · 0 评论 -
UVALive 4683 Find The Number(容斥+二分)
题单第六题:http://blog.youkuaiyun.com/shengtao96/article/details/52490020 题意:给你k个数(保证这k个数不能互相整除),找出第n个只能被这k个数里面的某一个数整除的数(不能被2个或者2个以上的数整除)。 看完题想想,应该就能二分来做,问题是怎么找第n个只能被这k个数字里面某个数字整除的数字。容斥的时候我们把相交的部分全部减去,只剩下各个集合不相原创 2017-08-23 17:07:58 · 352 阅读 · 0 评论 -
zoj 3556 How Many Sets I(容斥原理)
刚看这题有点懵逼,结合题解才看懂题目意思 题意:给你一个集合S,S有n个元素,有多少有序集合(S1,S2,...,Sk)(S_1,S_2,...,S_k)满足S1⋂S2⋂...⋂Sk=ϕS_1\bigcap S_2\bigcap ...\bigcap S_k=\phi ,SiS_i是S的子集,而且选出的这K个集合是可重复的。 思路:S一共有2n2^n个子集,从里面选k个集合(可重复),使得交集为原创 2017-08-25 09:39:24 · 281 阅读 · 0 评论 -
poj 3695 Rectangles(容斥原理)
在容斥原理题单里看到这个题,第一想法肯定是扫描线啊。但一看题单分析,还真是容斥。矩形相交的图形和文氏图差不多。然后dfs容斥就好了 题单里第四题:http://blog.youkuaiyun.com/shengtao96/article/details/52490020#include <stdio.h>#include <string.h>#include <algorithm>using names原创 2017-08-22 12:27:09 · 378 阅读 · 0 评论 -
hdu 4135 Co-prime(容斥原理)
经典容斥入门题?#include <bits/stdc++.h>using namespace std;typedef long long LL;LL solve(LL num, LL n){ vector<LL> p; LL temp = n; for(LL i = 2; i <= temp/i; ++i) { if(temp%i == 0)原创 2017-08-25 11:57:13 · 250 阅读 · 0 评论 -
hdu 4059 The Boss on Mars(容斥原理)
给你一个数n,求1-n之间所有与n互质的数字的四次方的和。求小于n且与n互质的数字以及求这些数字的和比较简单,但是这里多了个四次方,求四次方和,这就第一次碰到了。不过网上找了下,有求四次方和的公式。 有了这个那就好求了。这题最大的难处是取模,wa了一大片,一定要注意模运算,一不小心就溢出了。#include <bits/stdc++.h>using namespace std;typede原创 2017-08-26 11:42:20 · 331 阅读 · 0 评论 -
hdu 4407 Sum(容斥原理)
先给n个数,1-n,排成一行,进行m次操作。操作1是计算第x个数和第y个数(闭区间)之间和p互质的数字的和。操作2是把第x个数字改成c。如果没有第二个操作,这个题还是很简单的,看到第二个操作,就有点懵了,一旦修改了数字那就不是连续的了,不好求了。好在修改次数很少,顶多1000次操作,只有一部分是操作2.这样就可以把操作2用一个map记录下来,然后按照连续区间求和,然后再遍历map修改那些改变过的值。原创 2017-08-26 11:50:01 · 336 阅读 · 0 评论 -
poj 2773 Happy 2006(容斥+二分)
输入m和k,求与m互质的第k个数,与m互质的第一个数为1。先分析求某个范围内与m互质的数,肯定要容斥的,现在求第k个与m个互质的数字,而且范围不知道,既然不知道,那就二分来找这个范围,找到后也就找到结果了。#include <stdio.h>#include <string.h>typedef __int64 LL;const LL One = 1;const LL INF = One<<61原创 2017-08-23 14:46:44 · 235 阅读 · 0 评论 -
51nod 1486 大大走格子(dp,容斥)
参考题解:http://blog.youkuaiyun.com/mrazer/article/details/52047436 看到题首先是要想到容斥,因为之前看的一篇容斥的文章讲到过。不过里面把这部分内容划掉了,因为讲的有问题。。。。其次呢,想到机器人走方格的题目,毕竟这只是比那个多了个不能走的格子,不过想了想,还是不会做啊 还是好好看题解吧。。。 我把题解中的状态转移方程展开了几项,正好是++–的容斥原创 2017-10-09 20:17:22 · 517 阅读 · 0 评论 -
UVA 10721 Bar Codes(容斥原理)
题意转换下就是x1+x2+x3+...+xk=n,1<=xi<=mx_1+x_2+x_3+...+x_k = n, 1<=x_i<=m。以样例为例子,x1+x2+x3+x4=7,1<=xi<=mx_1+x_2+x_3+x_4=7,1<=x_i<=m,设y1=x1−1,y2=x2−1,y3=x3−1,y4=x4−1y_1=x_1-1,y_2=x_2-1,y_3=x_3-1,y_4=x_4-1,则y1+原创 2017-08-21 19:53:01 · 280 阅读 · 0 评论 -
poj 3904 Sky Code(容斥原理)
思路:从一堆数里面选四个数,而且这四个数gcd=1,问一共有多少种方案,我们考虑这四个数字gcd!=1的情况有多少种方案,然后用C(n,4)-4个数gcd!=1的情况。计算gcd!=1的方案数,是将这N个数字每个数字都素因子分解,对于每个数num,计算出他的素因子能够组合出多少种num的因子,然后记录下来,同时还要记录这个因子是由几个素数组合成的,以便容斥时判断加减。在计算gcd!=1的情况的时候呢原创 2017-08-21 16:59:23 · 383 阅读 · 0 评论 -
hdu 3208 Integer’s Power(容斥原理)
看着和hdu 2204有些相似,但是解法还是有差距的。求(a,b)之间的数字的幂的和,求出来1-b的减去1-(a-1)的即可。一个数字表示成M^K,取那个最大的K作为这个数字的幂。考虑枚举所有的幂,2^60>1e18,所以从2枚举到59就行。比如64可以表示成2^6,4^3,8^2,则64的幂就是6。但是有重复,就用到容斥了,8^2已经包含64了,但是64的幂是6,所以就要去掉8^2这种情况,也要去原创 2017-08-18 19:59:38 · 314 阅读 · 0 评论 -
hdu 1796 How many integers can you find(容斥原理)
有坑,那就是可能输入0。这个容斥比较简单,枚举所有可能的情况,然后容斥,奇加偶减,共2^m种情况。计算lcm的时候小心int溢出#include <bits/stdc++.h>using namespace std;int n,m;int mset[25];int lcm(int a, int b){ return a/__gcd(a,b)*b;}int main(){ i原创 2017-08-18 21:56:27 · 208 阅读 · 0 评论 -
hdu 2841 Visible Trees(容斥原理)
和hdu 1796差不多 枚举1-n的每个数字,计算1-m有多少数字和他互质。 合数分解,然后容斥#include <bits/stdc++.h>using namespace std;vector<int> p;//计算1-n有多少数字与num互质int solve(int num, int n){ p.clear(); for(int i = 2; i <= num/原创 2017-08-19 09:23:49 · 261 阅读 · 0 评论 -
hdu 1695 GCD(容斥原理)
和hdu 2841差不多,去个重复就行#include <bits/stdc++.h>using namespace std;vector<int> p;int solve(int num, int n){ if(num == 1) return n; p.clear(); for(int i = 2; i <= num/i; ++i) { i原创 2017-08-19 10:26:28 · 220 阅读 · 0 评论 -
bzoj 2440: [中山市选2011]完全平方数(二分,容斥,莫比乌斯反演)
题目并不难,不过没想起来 题解:http://blog.youkuaiyun.com/qq_35649707/article/details/75930849 看完题解,还是wa了好几发,上界设小了。。#include <cstdio>#include <cmath>#include <cstring>#include <climits>const int MAXN = 1e5;int mu[MAX原创 2017-08-08 15:49:12 · 410 阅读 · 0 评论 -
51nod 1284 2 3 5 7的倍数(容斥原理)
先求出2,3,5,7的倍数的个数,然后用n减掉就好了。。#include <iostream>#include <algorithm>using namespace std;typedef long long ll;ll gcd(ll a, ll b){ ll temp; while(b) { temp = a % b; a = b;原创 2017-05-11 18:59:52 · 382 阅读 · 0 评论 -
zoj 3233 Lucky Number(容斥原理)
题目不难,有些细节没想到。。。。 求出能够至少被BLN的某个数字整除的数字的个数很好求。要满足BUN中至少有一个数字不能整除这个幸运数,排除掉能被BUN中所有数字最小公倍数整除的数字后就完了。 也就是用容斥原理求[low,high]满足BLN集合条件的x的时候,减去[low,high]能整除lcm(x,bm)的个数(bm是指BUN中所有数字的公倍数) 还有就是最小公倍数可能会溢出long lo原创 2017-08-19 22:50:45 · 656 阅读 · 0 评论 -
poj 1091 跳蚤(容斥原理)
要使跳蚤可以跳到起始点左边一个单位,要保证卡片上N+1个数字的gcd=1gcd=1,否则的话,跳蚤跳到距离起始点左边或者右边的距离一定不能躲开他们之间的公因子。这就好求了,就是求有多少种方案使得这N+1个数字的gcd为1,这个并不好求,但是我们可以求有多少种方案使得N+1个数字的gcd!=1gcd!=1。因为M是最大的,所以这个gcd一定是M的因子,我们可以把M素因子分解,然后枚举M的素因子进行容斥原创 2017-08-20 21:30:57 · 355 阅读 · 0 评论 -
51nod 1269 Devu and Flowers(容斥原理)
和《组合数学》里面将生成函数那里的几个例题差不多。根据给出的数据,列出来(1+x)∗(1+x+x2+x3)∗(1+x+x2)(1+x)*(1+x+x^2+x^3)*(1+x+x^2),展开后就能得到结果。不过看了看Si的范围就懵逼了。乖乖的找题解:http://www.cnblogs.com/L-Ecry/p/3898771.html思路: 这就相当于把k朵花放到n个瓶子里,有多少方法,如果没限制的原创 2017-10-10 17:17:04 · 337 阅读 · 0 评论