随笔分类 -  【Polya】

【HDU】3441 Rotation
摘要:题意:给出A和C(1<=A,C<=10^9),所有满足B * B * K + 1 = A * A, (K >= 0)的B,构成边长为B的正方形,等角度的围绕在一个小正方形的周围。用C种颜色着色,边长为B的正方形旋转后相同视为相同的方案,整个图形绕中间的小正方形旋转后相同也视为相同的着色方案,求着色方案数。整体思路是:首先,忽略中间的小正方形,得到所有的B,求边长为B的着色的方案数X。其次,将每个B看成一个点,求用X种颜色对一个环着色的方案数。最后,将答案乘以C。要得到所有的B。由于A*A达10^18次方,根号n的复杂度寻找B肯定行不通。观察到B*B*K=A*A-1=(A+1) 阅读全文
posted @ 2012-09-15 20:40 DrunBee 阅读(695) 评论(0) 推荐(0) 编辑
【HDU】2865 Birthday Toy
摘要:题意:n个小圆组成的正n边形,中间有一个大圆。有木棍相连的两个圆不能有相同的颜色,旋转后相同视为相同的方案,求着色方案数。设有n个小圆,k种颜色(3<=N<=10^9, 4<=K<=10^9)。首先,很容易想到从k种选一种给大圆,然后用k-1种颜色对小圆着色。若不存在相邻圆颜色不同这个限制,则直接Burnside定理。若存在限制,但是颜色种数很少,可以构造矩阵然后快速幂,得到一个置换使着色不变的着色方案数。现在颜色种数很多,但是颜色限制较简单,可以考虑公式之类的。考虑将n个圆的环,等分成t部分,每部分有m个圆。F表示m个圆满足限制的着色方案数。若m=1,则F=0若m=2 阅读全文
posted @ 2012-09-14 14:50 DrunBee 阅读(786) 评论(0) 推荐(0) 编辑
【HDU】4187 Alphabet Soup
摘要:题意:一个圆上有n个点,用不同的角度表示,用k种颜色对n个点着色,旋转后相同视为同一种着色方案,问着色方案数。举几个例子:0 90000 180000 270000,每次旋转90度,每个点都能重合。0 45000 90000 180000 270000,无论怎么旋转,都不能重合。30000 150000 180000 330000,旋转180度才能重合。如何判断在旋转360度之内,能重合几次。将两个连续的点之间的角度差值处理出来,最多循环t次,那么有t个旋转使得重合。这可以用到next数组的性质。设当前得到a个循环,每个循环b个点。那么可以把b个点看成一个点,那么问题转化为a个点构成的环,着k 阅读全文
posted @ 2012-09-14 00:37 DrunBee 阅读(454) 评论(0) 推荐(0) 编辑
【HDU】3547 DIY Cube
摘要:题意:用k种颜色对立方体着色,旋转后相同视为相同的方案,求着色方案数。六个面,每个面为底可以有4个旋转,总共24种置换。初始时对下底面旋转有:x^8 + x^2 + x^4 + x^2将垂直于水平面的四个面翻转90度到底面,并有四个旋转:4*(x^2 + x^4 + x^4 + x^4)。将上底面旋转180度到下底面,并有四个旋转:x^4 + x^4 + x^4 + x^4。 1 import java.util.*; 2 import java.math.*; 3 4 public class Main { 5 public static void main(String[] ar... 阅读全文
posted @ 2012-09-13 00:41 DrunBee 阅读(435) 评论(0) 推荐(0) 编辑
【HDU】3923 Invoker
摘要:同【POJ】2409 Let it Bead只不过要求逆元。 1 #include<cstdio> 2 typedef long long LL; 3 #define MOD 1000000007 4 LL PowMod(LL a, LL b, LL c) { 5 LL ans; 6 a %= c; 7 for (ans = 1; b; b >>= 1) { 8 if (b & 1) { 9 ans *= a;10 ans %= c;11 }12 a *= a;13 ... 阅读全文
posted @ 2012-09-12 21:48 DrunBee 阅读(278) 评论(0) 推荐(0) 编辑
【HDU】1812 Count the Tetris
摘要:题意:n*n个方块组成的正方形,着k种颜色,旋转翻转视为相同的方案,有多少种方案。Burnside定理,一共有8个置换,每个置换统计一下不变的着色数即可。import java.util.*;import java.math.*;public class Main { static int Count1(int n) { int ans; if (n % 2 == 0) ans = 0; else ans = 1; for (n--; n > 0; n -= 2) a... 阅读全文
posted @ 2012-09-12 21:28 DrunBee 阅读(671) 评论(0) 推荐(0) 编辑
【POJ】2888 Magic Bracelet
摘要:题意:m种珠子串成由n个珠子构成的环,并且有一些限制,比如第i种与第j种不能相邻,旋转后相同算是同一种方案,求方案数。(m<=10,n<=10^9)如果没有限制条件,可以很容易用Burnside定理+容斥得到答案。如果只考虑限制,观察发现,m很小,n很大。那么可以通过快速幂得到从第i种到第j种,共有k个珠子的方案数。再回到Burnside定理,显然有n种置换,现在问题是如何求每种置换能保持不变的着色方案数:在【POJ】2154 Color已经推出,第i种置换(即旋转360/n*i度)会有GCD(n,i)种不同的颜色,循环节长度为GCD(n,i)。就可以用快速幂得到从第i种回到第i种 阅读全文
posted @ 2012-09-11 14:43 DrunBee 阅读(1150) 评论(0) 推荐(0) 编辑
【POJ】2154 Color
摘要:题意:n个珠子的环,之多着n种颜色,考虑旋转,不考虑翻转。问模P的方案数。运用Burnside定理,有n个置换,每个置换使得着色不变的着色个数有GCD(n,i)个。GCD(n,i)个的原因:【POJ】2409 Let it Bead由于n达到十亿,显然不能枚举。但是可以发现,GCD(n,i)即n约数的个数很少。问题转化为1~n有多少个数,使得GCD(n,i)=k。其中k是n的约数。这个问题等价于与n/k互质的个数有多少,那么容斥就能搞定。由于有模P,Burnside定理最后要除以n,但是n与P不一定互质,可能没有逆元。观察到分子,不妨先都除以n,就避免了这个问题。 1 #include< 阅读全文
posted @ 2012-09-10 15:31 DrunBee 阅读(1435) 评论(0) 推荐(1) 编辑
【POJ】2409 Let it Bead
摘要:题意:用k种颜色对n个珠子构成的环上色,旋转翻转后相同的只算一种,求不等价的着色方案数。Burnside定理的应用:当n为奇数时,有n种翻转,每种翻转都是以一个顶点和该顶点对边的中点对称。有k^(n/2+1)*n种。当n为偶数时,有n种翻转,其中一半是以两个对应顶点,另一半是以两条对边对称。有k^(n/2+1)*n/2+k^(n/2)*n/2种。考虑旋转:枚举旋转角度360/n*i,(0<i<=n),也就是一个置换。经过该置换,颜色仍保持不变的着色方案有k^GCD(n,i)种。一个长度为n的环,每i个上同一种颜色,可以上多少种颜色。假设起点在x,则x,x+i,x+2*i,……,x+ 阅读全文
posted @ 2012-09-10 10:42 DrunBee 阅读(2037) 评论(0) 推荐(0) 编辑