摘要:
题意:有n个点排成序列,两个人甲乙从1出发,到达n,中间的点不允许到达两次,只能从左向右走,问最多两人访问多少点。 (膜大佬) 解: dp f(i, j) 表示甲到了i点,乙到了j点,两人最多访问了多少点。 关键性质:f(i, j) = f(j, i) *** 分析这个问题 (1) f(i, j) 阅读全文
摘要:
meeting:给正n边形每个点染上黑色或者白色,问有多少个同色的等腰三角形。 以正五边形为例这里将最上面的点作为顶点,得到若干对相等的腰 ,注意到以最上面的点作为顶点的等腰三角形的个数,等于颜色相等且都为顶点颜色的对称点的个数。 O(n^2)统计即可。 PS:注意减去等边三角形的情况。 1 #in 阅读全文
摘要:
注意到要字典序最小,从而变为水题。 从a选到z,每次必然是先看选部分当前字符x是否能满足覆盖,若不能则选上所有的字母x,不然break,输出答案。 进行26次dp即可。 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 阅读全文
摘要:
在一个nxm的镜面二维空间内,向(1,1)发射一条射线,来回反射,当遇到四个角之一时光线消失。 给K个点,问K个点第一次被射中是什么时候(v = sqrt(2)) 解:注意到只有 2*(n+m)个对角线,从而从(1,1)发射光线后,最多折射O(n)此。 只需要模拟光线的折射即可。 具体实现时,记录光 阅读全文
摘要:
假定1为本树的根,对于任意的一个联通子图,可以认为是从树上一个点向子树的儿子节点延伸产生的树。 从而考虑dp:$f(x,j)$ 表示从x点向子树延伸而出异或和为j的连通子图的个数考虑从 $f(p,j)$ 转移到 $f(x,j)$用类似背包的方法:$h(i,j)$ 表示考虑前i个儿子从点x向下延伸产生 阅读全文
摘要:
首先考虑假如是树上的做法:考虑dp,f(i)表示对i的子树染色的方案数。用hash可以实现查询两棵子树是否相同。从而根据hash值排序分类,将相同的子树放在一类. (1)f(i)等于每一类的f(p)乘起来除以此类大小size的阶乘。(2)从而O(nlogn)求出了环周围的树的答案 然后考虑用群论求环 阅读全文
摘要:
首先考虑本题的$O(n^2)$做法。 $Part1$ 对原序列从大到小排序后,考虑每个数字对最终答案的贡献,有第x个数字对答案的贡献十分难以计算,所以考虑计算数字x是集合第K大的方案数,作为数字x对$ans(K)$的贡献,然后对$ans$求前缀和,这样得到了x是集合第1~K大的对答案的贡献 $Par 阅读全文
摘要:
A:问一个长度为n小于等于100000的序列是否存在能整除m的连续子段。 前缀和之后,$ S[l,r] = S(r) - S(l-1) $ 取余m后只要查询在S里是否存在出现两次的数值即可。 注意事项:由于是多组数据的题目,一定要把上一组的数字读完,而不是得出了答案直接break!!!!!! 1 # 阅读全文
摘要:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 6 #define LD double 7 #define sqr(x) ((x)*(x)) 8 #define eps 1e-8 阅读全文
摘要:
题目:给出一个只含有1,2,3的数字序列,问最少交换多少次才能将之变为递增数列。 解: 注意到只有1,2,3,我们只要将1,3交换到自己的应在位置上那么排序就已经完成了。 需要交换的有几种,记$a(x,,y)$表示x在应该是y的位置上的$a(i)$的个数,那么我们优先交换a(1,3)和a(3,1)里 阅读全文