计数
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
bzoj3160 万径人踪灭(manacher+fft)
要求不连续的回文子序列个数。我们考虑用所有的回文子序列个数-连续的回文子序列个数。连续的回文子序列个数就是回文子串的个数,我们可以用manacher来求。考虑如何求回文子序列的总数。我们先都按manacher那样插入若干’#’以后,处理出一个f[i]数组,表示i两侧对称的字母对数。(含自己,不含#)。则总数就是∑i=22n2f[i]−1\sum\limits_{i=2}^{2n}2^{f[i]}-1原创 2018-03-15 22:58:43 · 336 阅读 · 0 评论 -
uva11255 Necklace(polya+组合数学)
三种颜色的珠子分别有a,b,c颗,用这些珠子能串成多少种不同的环?考虑翻转同构,旋转同构。(3<=a+b+c<=40)我们先搞出置换群G,这次不同的是我们的集合M有了限制,但不要紧,我们还是要求G中每个置换下的不动点个数的算术平均数。先考虑旋转同构: 还是考虑有k个循环节,那么每个循环节的长度len=n/k。每个循环节内的颜色都必须相同,这也就意味着每种颜色的个数一定要是len的倍数,否则一定不存原创 2018-03-27 13:41:41 · 368 阅读 · 0 评论 -
poj2154 Color(polya+欧拉函数)
只有循环同构。n很大,必须用欧拉函数来优化一下计算。计算较大数的欧拉函数可以直接枚举质因子来算,应该远小于n√\sqrt n。 为什么大家都跑的那么快呀orz,是蒟蒻姿势不对么原创 2018-03-27 14:21:52 · 282 阅读 · 0 评论 -
bzoj4517 [Sdoi2016]排列计数(错排+组合数学)
错排。 递推公式:Dn=(n−1)(Dn−1+Dn−2),D1=0,D2=1D_n=(n-1)(D_{n-1}+D_{n-2}),D_1=0,D_2=1 通项公式:Dn=n!∑k=2n(−1)kk!D_n=n!\sum\limits_{k=2}^n\frac{(-1)^k}{k!} 可以用容斥原理来理解。此题答案就是CmnDn−mC_n^mD_{n-m}原创 2018-04-28 13:38:06 · 246 阅读 · 0 评论 -
bzoj2844 albus就是要第一个出场(线性基)
首先有一个结论:一共n个数,线性基基底为m个数,那么一共有2m2m2^m个不同的数,每个数的出现次数为2n−m2n−m2^{n-m} 我们先求出< x的不同的数有多少个,然后∗2n−m∗2n−m*2^{n-m},+1即可。#include <bits/stdc++.h>using namespace std;#define ll long long#define in...原创 2018-05-25 22:05:07 · 287 阅读 · 0 评论 -
spoj104 Highways(矩阵树定理)
Matrix-tree定理裸题。 对于一张无向图G,我们有度数矩阵D[G]D[G]D[G] dij={du[i],0,i=ji≠jdij={du[i],i=j0,i≠jd_{ij}= \begin{cases} du[i], &\text{$i=j$}\\ 0, &\text{$i \neq j$} \end{cases} 我们还有邻接矩阵A[G]A[G]A[G] aij={1,0,i...原创 2018-05-26 13:00:20 · 262 阅读 · 0 评论 -
Wannafly挑战赛18
https://www.nowcoder.com/acm/contest/129#question A.序列(组合数学) -2和0.5一样多,且都为偶数,枚举一下具体个数就好了 O(n)O(n)O(n) 考时ZZ了,不会跳了过去…很久以后才A掉gg B.随机数(矩阵快速幂) 设f[i]表示前i个数有奇数个1的概率,则 f[i+1]=f[i]∗(1−p)+(1−f[i])∗pf[i+1...原创 2018-06-22 23:09:24 · 305 阅读 · 0 评论 -
bzoj5305 [Haoi2018]苹果树(组合数学)
首先n个点的这样生成的二叉树有n!种。 因此这就不再是一个期望问题,而是计数问题! 可能没逆元,烦躁qaq 考虑给每个点按生成顺序标号,我们来计算i->fa[i]这条边对答案的贡献。 我们枚举i的子树大小j,那么这条边就会被经过j*(n-j)次。 再考虑i子树内部形态数和外部形态数。 i子树内部形态数显然是j!∗Cj−1n−ij!∗Cn−ij−1j!*C_{n-i}^{j-1}。...原创 2018-06-15 21:09:07 · 689 阅读 · 0 评论 -
CF403D Beautiful Pairs of Numbers(计数,dp+组合数学)
首先做一个dp f[i][j]f[i][j]f[i][j]表示区间总长度为i,有j个区间,且任意两个区间的长度不同的方案数。两种转移:1、每个区间的长度都增加1,f[i][j]−>f[i+j][j]f[i][j]−>f[i+j][j]f[i][j]->f[i+j][j] 2、每个区间长度都增加1,并新增一个长度为1的区间,f[i][j]−>f[i+j+1][j+1]f[i][...原创 2018-06-23 21:14:08 · 480 阅读 · 0 评论 -
bzoj3812 主旋律(图论+状压dp+容斥原理)
题目给出一个 n 个点,m 条边的有向图,要求求出删掉一些边以后,整个图强联通的方案数,其中 n≤15,m≤n(n−1) 好难啊qaq 题解传送门:portal 实现上也有一些技巧要注意qaq#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#def...原创 2018-06-20 15:14:03 · 311 阅读 · 0 评论 -
bzoj4650 [Noi2016]优秀的拆分(计数+SA)
好久没写SA了的赶脚qaq 考试时写了95分的O(n2)O(n2)O(n^2)暴力hash我们考虑枚举中间分割点i,以i结尾的AA串个数*以i+1开头的AA串个数就是对答案的贡献。于是我们只需要处理出f[i],以i结尾的AA串个数 g[i],以i开头的AA串个数这两个数组。我们考虑枚举AA串的半长度len,每隔len个设一个关键点,那么一个合法的长度为len的AA串一定包含了恰好两个...原创 2018-06-27 23:07:09 · 226 阅读 · 0 评论 -
CF367E Sereja and Intervals(dp,计数)
因为不能包含,所以一定没有相同的区间,我们可以先不考虑顺序,求出可能的方案数,然后乘上n!就是答案。我们考虑按1~m的顺序枚举每一个数,由于不能包含,所以一个数上最多一个左区间和最多一个右区间,我们直接枚举这4种情况即可。因此f[i][j][k]f[i][j][k]f[i][j][k],表示考虑前i个数,有j个左括号,k个右括号的方案数。 在dp到X的时候强行选左括号即可。 由于nm<...原创 2018-07-12 14:05:40 · 564 阅读 · 0 评论 -
poj2409 Let it Bead(polya)
m种颜色,给n个点的环染色,旋转同构,翻转同构。类似poj1286你问我怎么看出来翻转同构的?看…看例子!原创 2018-03-27 11:45:28 · 316 阅读 · 0 评论 -
poj1286 Necklace of Beads(polya)
polya计数。一个置换是长这样的,与列顺序无关: (12233441)\left(\begin{matrix} 1&2&3&4\\ 2&3&4&1\end{matrix}\right) 群,自己学习下吧,懒得写了(逃由拉格朗日定理,如果A是S的一个子群,则|A| | |S||A| \ | \ |S|,且A的所有陪集大小均相等,为|A|。由轨道-稳定化子定理 |orb原创 2018-03-27 11:33:39 · 291 阅读 · 0 评论 -
bzoj1430 小猴打架(prufer序列+计数)
emmm 打架结果就是一颗n个点的无根树,一共有nn−2n^{n-2}种(可以拿prufer序列简单的证明),然后每条边还有顺序,所以答案就是(n−1)!nn−2(n-1)!n^{n-2}原创 2018-03-25 15:52:14 · 255 阅读 · 0 评论 -
bzoj5193 [Usaco2018 Feb]Cow Gymnasts(数学)
我们考虑n个台子上的牛最少的一个台子上有m只,记这个台子为i,则对于所有的j≡i(modg)j \equiv i \pmod{g},g=gcd(N,m)g = \gcd(N,m),台子j上的牛也必为m只。其余台子上的牛最多m+1只,且具有周期性,即以g为周期。具体证明请参见官方题解:传送门因此对于最少的牛数为m(m< n)的情况,我们一共有2gcd(N,m)−12^{\gcd(N,m)} - 1种方原创 2018-03-04 22:14:25 · 935 阅读 · 0 评论 -
bzoj1002 [FJOI2007]轮状病毒(矩阵树定理+递推+高精度)
关于矩阵树定理,见论文:portal 关于递推式推导,见:portal 我们可以得到f[n]=3∗f[n−1]−f[n−2]+2f[n]=3*f[n-1]-f[n-2]+2,需要高精度。原创 2018-03-18 23:50:24 · 465 阅读 · 0 评论 -
poj1737 Connected Graph(计数,组合数学,递推,高精)
求n个点的连通图的个数f[n],带标号。有两种做法。 1.直接搞出f[n]的递推式。 f[n]=∑k=1n−1f[k]∗f[n−k]∗Ck−1n−2∗(2k−1)f[n]=\sum\limits_{k=1}^{n-1}f[k]*f[n-k]*C_{n-2}^{k-1}*(2^k-1) 如何理解呢? 对于一张连通图,我们首先拿掉1号点,考虑此时2号点的情况,假设此时有k-1个点仍与2号点相连(原创 2018-01-14 12:44:55 · 592 阅读 · 0 评论 -
bzoj3028 食物(生成函数+逆元)
生成函数裸题,先写出各项的生成函数,然后乘起来,然后利用麦克劳林展开,计算n阶导,带入x=0,算出答案是C3n+2C_{n+2}^3. 具体题解见 这里原创 2017-11-09 21:40:24 · 450 阅读 · 1 评论 -
USACO2018JAN Gold
A.mootube(离线+并查集) 给定一棵n个点的树(n=1e5),有边权,两点间距离定义为两点路径上的边权最小值。m个询问(m=1e5),k,v,询问对于点v,距离>=k的点有多少个(不含v)离线+并查集,按k从大到小做,此时与v连通的所有点均为答案。 我已经菜到想不出这种题了qaqB.lifeguards(树+贪心) 给定一棵有根树,wrx一开始在根,每个叶子节点都是出口,你可以在每个出原创 2018-01-27 00:26:22 · 1129 阅读 · 0 评论 -
bzoj5190 [Usaco2018 Jan]Stamp Painting(dp+计数)
一共有n个格子,m种颜色,你每次可以 把连续K个格子涂成一种颜色。问你最后有多少种 涂色结果。(不能留有空白格子) 我们考虑怎样的结果序列是合法的,显然必须有 一段长度为k的连续区间为同一颜色,因为你最后一下 肯定要刷k个相同。我们可以发现,只要满足有这么一段 就都是合法方案。因此我们就是要统计至少有一段 k个相同的数的序列个数。我们发现求它的补集更好求, 即没有一段k个相同的数的序原创 2018-03-13 09:35:21 · 586 阅读 · 0 评论 -
CF588D Duff in Beach(dp+计数)
给定一个长度为n的数组a,长度为l的数组b由数组a循环连接而生成,最后一段可能不完整。问你从b中选出一个长度<=k的合法子序列bi1, bi2, …, bix (0 ≤ i1 < i2 < … < ix < l)的方案数是多少。合法子序列定义为: For each 1 ≤ j ≤ x - 1, ⌊ij/n⌋+1=⌊ij+1/n⌋]\lfloor i_j/n\rfloor+1=\lfloor i_{原创 2018-03-06 10:01:49 · 336 阅读 · 0 评论 -
bzoj5187 [Usaco2018 Jan]Sprinklers(数学+计数+前缀和)
这题真是神orz 首先我们发现原问题可以转化为:问你有多少对点对(x1,y1),(x2,y2)满足x1<x2,y1<y2x1<x2,y1<y2x1x1<x2,y1<y2,lowx2<=y2<=topx2,lowx1<=y1<=topx1x1<x2,y1<y2,lowx2<=y2<=topx2,lowx1&原创 2018-03-13 23:00:18 · 689 阅读 · 0 评论 -
spoj422 Transposing is Even More Fun(polya)
现在存储了一个2a∗2b 2^a * 2^b 的矩阵 • 矩阵在内存中是按行存储的 • 现在你想求它的转置 • 唯一允许的操作是交换两个内存位置的值 • 求最少需要的次数? • 4e5 组询问,每组询问 a + b <= 1e6首先,我们可以把内存中每个位置编码为一个 a + b 位的01串 那么内存 s 处存储的值的目标位置是 s 循环右移 b位对应的内存位置 设这些位置有 k 个循原创 2018-03-30 17:11:39 · 435 阅读 · 0 评论 -
bzoj1211 [HNOI2004]树的计数(prufer序列+组合数学+计数)
对于一颗n个点的无根树,我们可以得到唯一的prufer序列,长度为n-2。 每一个prufer序列也都唯一对应了一颗无根树。 每一个点x在prufer序列中的出现次数为d[x]-1,d[x]为x点的度数。此题给定每个点的度数,求一共有多少种不同的树,也就是求有多少种不同的prufer序列,满足每个数x出现了d[x]-1次。 我们应用组合数学的知识得到答案就是(n−2)!∏ni=1(d[i]−1原创 2018-03-25 14:55:36 · 259 阅读 · 0 评论 -
bzoj1005 [HNOI2008]明明的烦恼(prufer序列+组合数学+高精)
给定一棵n个点的树的一些点的度数,问你有多少种满足要求的无根树。还是转化成prufer序列,就是求一些数的出现次数给定,有多少种不同的prufer序列。设有m个点度数未知,k个位置未填,则答案就是(n−2)!∏i=1n−m+1(d[i]−1)!k!∗mk\frac{(n-2)!}{\prod\limits_{i=1}^{n-m+1}(d[i]-1)!k!}*m^k 需要高精,我们还是先分解质因数,原创 2018-03-25 15:40:47 · 274 阅读 · 0 评论 -
bzoj4558 [JLoi2016]方(容斥原理,计数,Hash)
这容斥真是写的我心态爆炸… 考虑用至少0个坏点的-至少1个坏点的+至少两个坏点的-至少三个坏点的+至少四个坏点的。 我们发现对于斜着的正方形,可以直接在框住它的大正方形处计数,边长为i的大正方形内就有i个正方形。 且我们发现每个点出现且仅出现在一个正方形上。因此对于至少一个坏点的正方形,我们只需要统计过一个坏点的正方形框架个数即可。然后就是毒瘤的分类讨论!至少两个三个四个的可以通过枚举两...原创 2018-07-13 23:27:23 · 374 阅读 · 0 评论