2012年9月7日
摘要:
题意:有3*n个人,分成n组,每组三个人。给出k个三元组,这三个人不可组队,问最后可以组队的总方案数。当k=0时,有(C[3*n][3]*C[3*n-3][3]*……*C[3][3])/n!种方案,展开以后可以得到dp[n]=(3*n)!/n!/6^n。显然可以写成递推式:dp[n]=dp[n-1]*(3*n-1)*(3*n-2)/2。那么容斥一下,答案=总方案数-至少含一个禁止组合的+至少含两个禁止组合的-……二进制暴力TLE了。DFS的话会有很多剪枝,当前几个已经出现冲突,自然不会再往后面搜了。 1 import java.util.*; 2 import java.math.*; 3 . 阅读全文
摘要:
题意:有n张卡片,每张上的值可以相同,每张上的值不超过m,第n+1张为m。设k[i]为任意整数,a[i]为第i张卡片的值,那么问∑k[i]*a[i]=1的a[i]有多少种(0<=i<=n)。有式子可得n+1个数线性无关,即最大公约数必然等于1。总数是m^n,只要求得最大公约数不等于1的种数,就能得到答案。先对m分解素因子,例如12,有2,3。是2的倍数的有6个:2 4 8 6 10 12。是3的倍数的有4个:3 6 9 12。是6的倍数的有2个:6 12。所以与12不互质的有6+4-2=8个。import java.util.*;import java.math.*;public 阅读全文
摘要:
题意:给定一个区间,求不能表示成k*x*x*x(x>1)的个数。区间转化为两个1~n,可以先求出能够表示成k*x*x*x(x>1)的个数。不妨假设x是某个素数,1~n中有n/(x^3)个值,x^3,2*x^3,……,n/(x^3)*x^3。假设t不是素数,可以表示t=k*x。那么t^3=(k*x)^3=k^3*x^3。显然会与x统计重复。所以,可以枚举素数的三次方,得到一个答案。但是,6^3=(2^3)*(3^3),被计算了两次。因此,需要用到容斥原理。 1 #include<cstdio> 2 #include<cstring> 3 #include< 阅读全文