UPD 2017.3.1 CFround402[8/8] CFround401[5/5](13题)
现在已经完成了:
58
bzoj [44]
bzoj1053 [HAOI2007]反素数ant
只考虑前10个素数,进行爆搜
bzoj1076 奖励关
倒着状压dp
bzoj1101 [POI2007]Zap
维护一下μ(g)的前缀和,后面部分分块
bzoj1176 [Balkan2007]Mokia
将询问拆成四个。cdq分治维护第一维x,用树状数组维护第二维y
bzoj1257 [CQOI2007]余数之和sum
后半部分分块维护即可
bzoj1406 [AHOI2007]密码箱
枚举k1和n1即可
bzoj1408 [Noi2002]Robot
利用一个数约数的欧拉函数之和等于自身得知三个答案之和。然后对所有质数分奇数个偶数个进行dp得到前两个答案
bzoj1409 Password
答案即pF[n]。使用欧拉定理后矩阵倍增求F[n]即可
bzoj1419 Red is good
倒着递推答案
bzoj1420 Discrete Root
N次剩余模板题
bzoj1426 收集邮票
推公式
bzoj1441 Min
裴蜀定理,求gcd即可
bzoj1467 Pku3243 clever Y
扩展bsgs裸题
bzoj1778 [Usaco2010 Hol]Dotp 驱逐猪猡
构造转移矩阵,级数收敛,然后高斯消元
bzoj1951 [Sdoi2010]古代猪文
使用欧拉定理,对于指数部分,将mod-1质因数分解,用lucas计算每个组合数的值,最后用crt合并起来
bzoj1968 [Ahoi2005]COMMON 约数研究
暴力
bzoj2045 双亲数
同bzoj1101
bzoj2134 单选错位
考虑期望的线性性
bzoj2216 [Poi2011]Lightning Conductor
我们把询问max分为两部分,一部分比i大,一部分比i小,这样我们就可以把原式的绝对值去掉。之后我们会发现这样的答案一定满足单调性,所以我们可以想到用整体二分的方式来进行转移
bzoj2253 [2010 Beijing wc]纸箱堆叠
对x进行cdq分治,然后分成两部分后先递归处理左区间,再将两边分别对y进行升序排序。之后利用树状数组维护一下答案的max即可
bzoj2318 Spoj4060 game with probability Problem
设f[i]表示剩i个石子Alice先手的胜率,g[i]表示剩i个石子Alice后手的胜率。不难发现当f[i-1]>g[i-1]时,双方都不想拿掉石子。反之双方都想拿掉石子。这样最优策略出来了,之后我们只要考虑胜率的递推式即可。
bzoj2684 简单题
同1176
bzoj2698 染色
考虑每个点的贡献,即求这个点被染色的概率。考虑其反面问题,即每个点不被染色的概率,一定是单次不被染色的概率的m次方。一个点不被染色,当且仅当序列全部在这个点的左边或全部在这个点的右边。等差数列求和即可。
bzoj2720 [Violet 5]列队春游
枚举每个人在每个位置,贡献为i的概率,求和即可
bzoj2721 [Violet 5]樱花
令y=x+t可得x=(n!)2t+n!,则答案为(n!)2的约数个数。
bzoj2738 矩阵乘法
整体二分过程中,每次加入比mid小的数,子矩阵和与k的关系
bzoj2882 工艺
字符串的最小表示,建立SS串的后缀自动机,每次走字典序最小的位置即可
bzoj3029 守卫者的挑战
期望背包dp
bzoj3036 绿豆蛙的归宿
拓扑排序后dp下即可
bzoj3143 [Hnoi2013]游走
列出点期望关系式,然后高斯消元,边的期望为E(a)/deg(a)+E(b)/deg(b)之后贪心编号
bzoj3450 Tyvj1952 Easy
差分后维护期望
bzoj3451 Tvyj1953 Normal
考虑每个点对的贡献,即当j点作为分割点时,i对其的贡献。我们知道如果满足条件,则i到j这条路径上所有点中,j最先被选为分割点。显然这个概率为1/(dist(i,j)+1)。所以我们需要统计出每条路径的长度。这里用点分治,合并树的时候,我们使用FFT进行转移即可
bzoj2969 矩阵粉刷
类似于2698
bzoj3110 [Zjoi2013]K大数查询
之前用树套树写的,这次用整体二分过了一遍
bzoj3566 [SHOI2014]概率充电器
树上期望dp
bzoj3926 [Zjoi2015]诸神眷顾的幻想乡
我们发现叶子节点个数很少,我们只要以每个叶子作为根得到一遍trie树,对于每棵trie树建立一棵广义后缀自动机即可(建在同一个后缀自动机上)。最后统计下sam[i].val-sam[sam[i].par].val的和即可
bzoj3998 [TJOI2015]弦论
建完后缀自动机后进行拓扑排序,我们在parent树上获取每个节点的right集合大小,再倒序dp得到后缀自动机上每个点的子树大小,至此问题得到了解决
bzoj4008 [HNOI2015]亚瑟王
考虑这r轮一起轮,计算p[i][j]表示到第i张牌时还有j次机会的概率。这一部分可以递推得到,然后分别计算对答案的贡献
bzoj4204 取球游戏
考虑每类求在操作第i次后,每类球的期望,发现转移矩阵是循环矩阵,可以将矩阵乘法优化到O(n^2)
bzoj4318 OSU!
差分,之后分别维护l[x],E[X],E[X^2],E[X^3]即可
bzoj4516 [Sdoi2016]生成魔咒
动态加入一个点之后,我们可以发现新增的答案为sam[np].val-sam[sam[np].par].val,即np这个结点maxlen-minlen+1的结果,表示新增的以其为终止结点的本质不同的子串的个数
bzoj4723 [POI2017]Flappy Bird
我们很容易发现,当结束位置确定时,需要点击的次数也就确定了,所以我们只要维护到每个柱子时,bird能到达的区域范围。注意这里要考虑坐标的奇偶性
bzoj4724 [POI2017]Podzielno
我们发现如果这个数能被B−1整除,其各个位数字之和一定是B−1的倍数。我们先把所有数字从大到小排成一列,这时各个位数字之和未必是B−1的倍数,我们至少减少一个其余数那个数字即可。然后预处理前缀和,查询的时候二分下就行
bzoj4726 [POI2017]Sabota?
第一眼想到二分实际上是不对的。我们考虑下这个叛徒的性质。首先我们容易发现,最坏情况一定是叛徒在某个叶子节点上。然后我们能发现所有叛徒节点形成的一定是一个完整的子树。我们设f[x]表示当以x为根节点的子树被完全策反的概率。f[x]=max{min(sz[e[i]]/(sz[x]−1),f[e[i]])}。当sz[x]超过k时更新答案
hdu [1]
hdu5126 stars
把询问拆成8部分。用第一次cdq分治维护x,用第二次cdq分治维护y,用树状数组维护z
Codeforces [13]
【Codeforces Round #402】 (8/8)
Div 2 A Pupils Redistribution 模拟
Div 2 B Weird Rounding 贪心
Div 2 C Dishonest Sellers 贪心,排序
Div 1 A String Game 二分答案,判断是否能在只删除前mid个的情况下完成匹配。匹配时使用贪心策略,即能匹配就匹配即可
Div 1 B Bitwise Formula 考虑每一位的贡献,然后模拟下
Div 1 C Peterson Polyglot 我们只需要求得如果删去第x层的所有节点,会缩减多少个节点即可。我们进行一次dfs,到每个点时,考虑删去该节点,其儿子结点们缩减的情况。不难发现,任意两个节点合并,只能实在考虑删去其lca的时候进行。并且这个路径上所有点都已经缩减完毕。因此可知,每两个节点只会被缩减一次。所以我们暴力合并即可
Div 1 D Parquet Re-laying 构造。我们可以考虑这样一个思路,把上下两个图案全变成只由LR构成的图案或只由UD构成的图案。这样我们把第二个图案变过去的方案倒转。所形成的所有操作即为答案。下来考虑怎样把一个图案全变成LR或UD,我们只需要不断进行循环,把所有UD变成LR,然后把所有LR变成UD。不断进行下去,显然我们可以得到答案
Div 1 E Selling Numbers 挺麻烦的一道DP。设f[x][i]为考虑第x个字符时,此处有
【Codeforces Round #401】 (5/5)
Div 2 A Shell Game 找到循环节,然后模拟
Div 2 B Game of Credit Cards 贪心
Div 2 C Alyona and Spreadsheet 预处理出每个位置向上构成最长不升序列的长度,然后记录一行的max即可
Div 2 D Cloud of Hashtags 贪心发现,我们倒着考虑,让第
Div 2 E Hanoi Factory 排序,以外径为第一关键字降序,内径为第二关键字降序排列。考虑如果当前第i因为外径小于当前方案中的最上面ring的内径,我们必须将这个最上面的ring去掉,否则我们之后都没法放了。用一个栈维护这个过程就好了