摘要:
题意 定义一个字符串某个子串的价值为:将其所有出现的位置染成黑色后,黑色连续段的个数。问有多少本质不同的子串,价值恰好为K。n,K<=1E5。 思考 由本质不同的字符串,考虑SAM维护。对于SAM上的一个节点,其endpos集合代表了字符串中的一些位置。设这些位置相邻的距离的集合为dis,则对于这个 阅读全文
摘要:
题意 https://codeforces.com/contest/990/problem/G 思考 在200000以内,因数个数最多的数位166320,共有160个因数。可以知道,从一个节点向下走最多只会有160种取值。 记集合f[u]为从u节点向下走可以取得的所有值及其个数,暴力转移即可。 至于 阅读全文
摘要:
题意 将n个数分为若干组,每组中最小的数不能比该组的元素总数多,求方案数。n<=2000。 思考 若得到n个数的一种大小的划分,则可以简单地求出其方案数。将其从大到小排序后,令largeri为大于等于i的数字的个数,b[i]为第i个组的大小,sum为b的前缀和,则对于第i个组,其贡献为C(large 阅读全文
摘要:
题意 现有n*m的长方形网格,每个格子中写着一个数,并构成了[0,n*m)的排列。每次可以将一行循环平移x格,也可以将一列循环平移x格。给出初始状态,给出一个到达给定状态的方案。n*m<=10000,n,m>=2。 思考 发现存在一种方法,能够使任意三个方格进行顺时针或逆时针改变位置。其中有一个方格 阅读全文
摘要:
题意 长度为n的数组,上面有k个位置是1,现在有l种长度的连续全1串,要求用最少的次数将这个数组异或成全0的数组。n<=1E5,k<=10,l<=100。 思考 先将数组进行异或的差分。可以发现,现在异或上全1串只是将两个端点进行异或。 接下来求出将每对1变成0的最小代价,之后就是简单状压。 复杂度 阅读全文
摘要:
题意 一个排列,每次选一个子序列按顺序放在开头,要求变成升序的操作次数不超过17次,给出方案。n<=1E5。 思考 对于ai=aj-1且i<j的数字,一定要保持其相对顺序。可以根据这个关系分成若干个块,并根据每个块最小的数从小到大将块编号为1~m。 接着把所有奇数编号的块选出来放在左侧。能发现这次操 阅读全文
摘要:
题意 http://codeforces.com/contest/1189/problem/F 思考 由于是子序列,答案只跟选法有关,与顺序无关,先排序。 直接计算答案比较困难。联想到期望的无穷级数计算公式,设gi表示beauty值大于等于i的总方案数,则答案=sigma(g1~max{a})。 对 阅读全文
摘要:
题意 http://codeforces.com/contest/1189/problem/D2 思考 显然地,如果出现度数为2且两条出边边权不相同的情况,是无法构造合法方案的。 下面考虑缩边后的树,此时每个非叶子节点的度数一定大于等于3。 枚举每个非叶子节点,将其重新作为树的根,并尝试将它所有的出 阅读全文
摘要:
题意 一颗有根树,每个点有黑白两种颜色和阀值ai,若它的子树中(不包括自己)的黑色数量大于ai,则产生一点贡献。每次将一个点的颜色取反,求每次修改后的贡献。n,q<=1E5。 思考 树剖后直接分块就行了。复杂度约为O((n+q)sqrt(nlogn)),但似乎更小? 代码 1 #pragma GCC 阅读全文
摘要:
题意 用这四种骨牌密铺n*m的正方形矩阵,可以不选,求方案数。n*m<=1E8。多组询问。 思考 用如上的表达难以进行计算,尝试转化为一种新的组合解释。 若从右上角开始填起,我们强制要求里面的轮廓线是单调增的。例如: 这种方法既不影响合法性,又不会重复计数。 可以看见,我们只关心轮廓线的形状,不关心 阅读全文