计数
文章平均质量分 82
未水
这个作者很懒,什么都没留下…
展开
-
poj 2154 polya 计数
操作时旋转,很简单。 关键在于计数要避免超时。 算sum(N^(gcd(i,N)))/N , 1 d=gcd(i,N),枚举i很慢,转换思维,枚举d,算出这个d对应有多少个i,d的可能取值就是所有 d | N i=d*x,N=d*y, 要让x和y互质,1 互质问题,整除问题最终归结为phi 事实证明long long 很慢,能不用尽量不用 对于直接枚举质因数的话,用l原创 2013-07-13 17:00:17 · 624 阅读 · 0 评论 -
zoj 3725 DP排列
DP计数, 有限制性条件下的计数无法直接推公式,一般含有重复,无法完全吻合 这时选择dp,调用前面算出的结果 (two[i-m-1]-dp[i-m-1])用的妙! #include #include #include using namespace std; #define ll long long #define mod 1000000007 #define N 100500原创 2013-07-16 20:05:53 · 981 阅读 · 0 评论 -
hdu4675 多校第七场 计数+去重
先算出d的倍数有多少个sequence 假设a[i]中不能整除d的个数有x个,这x个数一定要替换的,假如x>k,这时答案必然为0, 假如xm以内是d的倍数有m/d个,把这x个数替换掉有pow(m/d,x)种可能, 按题意还有k-x个数要替换,就从n-x个中选出k-x个数,C(n-x,k-x) 然后用d的倍数中除了它自身的数替换它(注意这k-x个数是d的倍数),pow(m/d-1,k-x)原创 2013-08-14 14:39:48 · 1036 阅读 · 0 评论 -
hdu 4705 树形dp+统计
1.A,B,C分别位于u的不同儿子 2.A,B分别位于u的不同儿子,C在u的祖先 #include #include #include #include #include using namespace std; #pragma comment(linker, "/STACK:16777216") #define N 100500 #define ll long long vecto原创 2013-09-03 12:03:01 · 1100 阅读 · 0 评论 -
hdu4750 最小生成树
关键是利用“所有从s到t的路径上的最长边的最小值”这个条件,我们所要的只是这个最小值: 对于(s,t),这个最小值一定是s到t的最短路上的最长边,则所有可能被取到的边是最小生成树上的边 因为最小生成树利用的就是贪心,树上的边都是图上每两点间的最短路会经过的边 实现: 在kruskal的过程中,添加一条边,权值为w,两个连通分量u和v变为连通,有num[u]*num[v]*2对pair会取到原创 2013-09-22 13:48:21 · 1173 阅读 · 0 评论