摘要: http://codeforces.com/problemset/problem/183/D 题解 我们可以对于每种$size$的$T shirt$,设计一个$dp$。 令$dp[i][j]$表示这种$T shirt$准备$i$件,转移到了第$j$个人,有$i$个人喜欢这种$T shirt$的概率。阅读全文
posted @ 2019-06-27 12:01 ZH_comld 阅读(0) 评论(0) 编辑
摘要: https://loj.ac/problem/2736 题解 挺有意思的题。 考虑这种操作不好直接维护,还有时限比较长,所以考虑分块。 考虑一个操作对整个块的影响,无非就是可能把最大的拿走,再把新的元素插进去。 对于散块我们可以重构,那么对于整块我们也可以快速查询。 现在的问题就是对于一个整块,我们阅读全文
posted @ 2019-06-26 21:21 ZH_comld 阅读(5) 评论(0) 编辑
摘要: https://loj.ac/problem/517 题解 首先我们如果没有排序这个骚操作的话,可以直接记一下各个数位的前缀和,然后异或标记给全局打,查询的时候先把区间信息提取出来然后整体异或就好了。 对于排序,我们考虑对所有排好序的节点建$trie$树,这样即使有全局异或标记,我们也可以在$tri阅读全文
posted @ 2019-06-26 18:33 ZH_comld 阅读(6) 评论(0) 编辑
摘要: 题解 我们可以把一副牌看成一个字符串,字符串的第$i$位表示编号为$i$的牌有多少张。 注意一下胡牌的条件:1、四面+一对2、七对。 我们可以设计一个$dp$。 $dp[i][j][k][0/1]$表示已经做完了前$i$种权值,保留了$(i 1,i)$有$j$对,除此之外还有$k$个$i$,除此之外阅读全文
posted @ 2019-06-19 11:30 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 NB分析题。 首先我们令$s[i][j]$表示以$(i,j)$为左上角的矩形的权值和。 因为$a[i][j]+1=a[i+1][j+1]$。 所以$s[i][j]+n m=s[i+1][j+1]$。 再有当$i\geq m$时$s[i][1]=s[i+1][1]$。 $j\geq n$时$s[阅读全文
posted @ 2019-06-17 14:25 ZH_comld 阅读(6) 评论(0) 编辑
摘要: 题解 仙题。 参考: 首先我们可以枚举每个点作为最后保留的节点,以它作为根节点进行树形$dp$。 注意到我们删去一条边可以看做把边权弄成0,这样根节点可以在边权为0的边上随意走动。 我们设计一个状态:$dp[u][i]$表示在以$u$为根的子树中,当根节点走到$u$时,子树内还剩下$i$条边的方案数阅读全文
posted @ 2019-06-17 09:18 ZH_comld 阅读(7) 评论(0) 编辑
摘要: 题解 有意思的题。 首先考虑在$DAG$上拓扑的过程,设当前队列中的点集为$S$,那么有结论是这些点之间都不能互相到达,这个比较好理解。 那么我们考虑在弹出一个点的时候计算它能够到达多少点,如果当前队列里有超过一个点,那它肯定就不行了。 如果一个点都没有,那么剩下的点他都可以访问。 如果只有一个点,阅读全文
posted @ 2019-06-16 16:50 ZH_comld 阅读(38) 评论(0) 编辑
摘要: 题目大意: 求: $$ \sum_{i 1}^n\sum_{j=1}^nmax(i,j)\sigma(i j) $$ 题解 对于这个$\max$,套路的把它转化成: $$ 2 \sum_{i=1}^n\sum_{j=1}^ii \sigma(i j) \sum_{i=1}^n i \sigma(i 阅读全文
posted @ 2019-06-16 14:47 ZH_comld 阅读(5) 评论(0) 编辑
摘要: 题解 ~~warning:式子全都抄的题解。~~ 我们可以先套一层$\min \max$反演。 $$ ans=\sum_{i=1}^n ( 1)^{i 1}\binom{n}{i}g_i $$ 那么$g_i$就表示喂饱$i$只鸽子中至少一只的期望步数。 $$ g_i=\sum_{i\geq 1}i 阅读全文
posted @ 2019-06-16 09:41 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题目大意: 给定$n$,$k$,$mod$,求随机排列在$k$层归并排序下逆序对的期望。 题解 考虑这$k$层归并会把序列分成若干个块。 这些块内的顺序是原序列的相对顺序,我们要把这些序列归并起来。 考虑一个块内,每对元素都会有$\frac{1}{2}$的概率成为一个逆序对. 所以每个块的贡献就是$阅读全文
posted @ 2019-06-15 17:29 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 注意到区间之间没有交叉,所以只有包含的关系,我们可以把它整成一棵树。 然后设一下$dp[i][j]$表示以$i$为根的子树,最大值不超过区间最大值+$j$的概率。 转移: $$ dp[u][j]=p \prod dp[v][mx[u] mx[v] 1+j]+(1 p) \prod dp[v][阅读全文
posted @ 2019-06-14 20:23 ZH_comld 阅读(9) 评论(0) 编辑
摘要: 题解 先钦定$1$号站在第一个位置上,那么他第一轮要和$(2)$打,第二轮要和$(3,4)$打,第三轮和$(5,6,7,8)$打。 那么这些区间的最小值不能是给出的数。 考虑容斥。 我们把所有限制位置从大到小排序,设$dp[i][s]$表示前$i$个数,$S$集合中的区间已经被覆盖了的方案数。 那么阅读全文
posted @ 2019-06-14 09:24 ZH_comld 阅读(4) 评论(0) 编辑
摘要: 题解 首先我们观察到在每次取模的过程中一定会有一次的结果是$a_i 1$,因为如果不是,我们可以调整,答案肯定是会更优的。 于是我们的有用状态就变成了$O(n)$级别。 我们可以对于一个状态,把它表示为$(a,b)$,表示前$i$个数,当前取完模的结果为$a$,总和写成$i a+b$的形式后最大的$阅读全文
posted @ 2019-06-14 07:55 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 考虑$dp$ $$ dp[i]=\sum_{i=0}^{i 1}dp[j] (i j)^2 $$ 我们可以设$(i j)$为$x$,那么随着$i$向右移动一格,每个$x$都是会增长$1$的。 $$ dp[i]=\sum_{i=0}^{i 1}dp[j] (x+1)^2 $$ $$ dp[i]=阅读全文
posted @ 2019-06-13 21:25 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 要求最大值,所以考虑$min max$ $$ \max(S)=\sum_{T|S}\min(T)^{|T|+1} $$ 那么一个集合的$min$如何求呢,我们一共有$n (m 1)+m (n 1)$个相邻的对,令该集合涉及到的相邻的对的个数为$x$,那么期望的时间为$\frac{n (m 1)阅读全文
posted @ 2019-06-13 10:52 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 我们可以把每个格子拆成两个点,一个表示横向的,一个表示纵向的,相邻的格子横向和纵向连边。 如果直接按照题意做的话,我们应当在横向和纵向的点之间连边,有限制的边设下界为1,然后跑可行流。 或者考虑用链覆盖的思想,我们把横向点当成入点,纵向点当成出点,然后相邻的入点连向出点。 入点和出点之间连边表阅读全文
posted @ 2019-06-13 08:24 ZH_comld 阅读(5) 评论(0) 编辑
摘要: 题解 神仙题。 考虑最后一定是放了一个$1$,然后把其他位置都删掉了。 再考虑到对于序列中的每个位置都对应了一次操作。 我们可以对于每个放$1$的操作,把它这次删掉的位置对应的操作当做它的儿子节点。 这样是一个树形结构,应为最后只能剩下一个$1$,所以这是一个有根树。 于是我们把问题转化为了有根树计阅读全文
posted @ 2019-06-11 19:30 ZH_comld 阅读(10) 评论(0) 编辑
摘要: 题目描述 有一些区间,还有一些点。 问最小的k使得选出任意k个区间,每个点都可以匹配上区间,一个区间只能匹配一次。 题解 考虑对于每一个点,我们有$x$个区间包含它,那么答案的一个下界是$n x+1$。 但是这样没有考虑到一个区间被两个点匹配的情况。 那么我们从左到右做,没到一个点,就把右端点最靠左阅读全文
posted @ 2019-06-11 17:38 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 我们先把这个排列从$1 \sim 2n$表达出来,然后题面中的每一对数我们可以用一条线把他们连起来,那么在序列中表达出的值是这条线的左端点。 如果一开始每个数都没有限制的话,我们则需要求有哪些数会成为左端点,这个其实就是卡特兰数,求答案的话还需要求一个阶乘。 现在有一些位置有了限制,我们就把有阅读全文
posted @ 2019-06-11 10:46 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 首先我们注意到对于任意一种划分,我们都可以把它调整长度为$(len,len 1,len 2....1)$的。所以我们可以用$(\tt{第一个串的位置,第一个串的长度})$来表示一个划分。 所以我们可以设$dp[i][j]$表示$(i,j)$这种方案是否可行,转移是从后往前的,可以用哈希,因为第阅读全文
posted @ 2019-06-11 08:49 ZH_comld 阅读(18) 评论(0) 编辑
摘要: 题解 考虑激活每个节点时,它的每个儿子都是放满的。 那每一次的操作我们可以用一个二元组来表示$(w_i \sum w_{son},\sum w_{son})$。 表示这一次操作完后的增量和这次操作中石子数达到的峰值。 那么一个节点被操作当且仅当它的所有儿子都被操作。 这样很不好处理,所以我们把整个操阅读全文
posted @ 2019-06-10 20:32 ZH_comld 阅读(19) 评论(0) 编辑
摘要: 题解 $$ dis=day a+b $$ $$ b= day a+dis $$ 然后就变成了斜率优化。 考虑边分治,每次把两边的凸包求出来。 然后再把两边的凸包做闵可夫斯基和求出新的凸包。 最后把分治求的的所有凸包上的点再做一次凸包即可得到答案凸包。 代码 c++ include define N 阅读全文
posted @ 2019-06-04 20:34 ZH_comld 阅读(21) 评论(0) 编辑
该文被密码保护。
posted @ 2019-06-02 08:25 ZH_comld 阅读(2) 评论(0) 编辑
摘要: 题解 平面图转对偶图。。 首先我们转的话需要给所有的平面标号,然后找到每条边看看他们隔开了哪两个平面。 做法就是对每个点维护它的所有排好序的出边,然后对于每一条有序边找到它的一条后继边。 如果一直找下去,就会找到一个平面,依次标号就好了。 我们转好了对偶图,$dfs$出对偶图的一颗生成树,然后对于一阅读全文
posted @ 2019-06-01 14:32 ZH_comld 阅读(185) 评论(0) 编辑
摘要: 题目大意 给一颗n个节点的树,每个边上有一个守卫。有m个居民,每个居民有一个散步路径(两个节点的树上最短路)。一个居民高兴当且仅当他获得了一个宠物或者他散步的路径上所有的守卫都有宠物。求最少需要几个宠物能让所有居民高兴。输出方案。 n,m define inf 2e9 define N 20009 阅读全文
posted @ 2019-05-29 21:49 ZH_comld 阅读(18) 评论(0) 编辑
摘要: 题解 对于两种颜色的染色,我们可以把它看做选择问题。 比如说红色的代价小,所以我们尽可能多的染红色。 然后我们发现有限制的同一行或者同一列内染红色的数量是一段区间。 然后网格上的问题转化为横纵坐标匹配问题。 然后就是一个有上下界的网络流,貌似要判定有无解的话只能最大流? 离散化不要离散限制,还有要特阅读全文
posted @ 2019-05-29 19:45 ZH_comld 阅读(48) 评论(0) 编辑
摘要: 题解 神仙。 考虑这个循环小数的循环节为$l$。 那么有 $$ \frac{x}{y} \left\lfloor\dfrac{x}{y}\right\rfloor=\frac{xk^l}{y} \left\lfloor\dfrac{xk^l}{y}\right\rfloor $$ $$ x \lef阅读全文
posted @ 2019-05-29 11:18 ZH_comld 阅读(34) 评论(0) 编辑
摘要: 题解 考虑容斥,令集合S为我们钦定S集合必须要在1号节点后面,那么答案为。 $$ ans=\sum_{S}( 1)^{|S|}P(S) $$ 然后这个$P(S)$为$\frac{w_1}{w_1+w_S}$。 这个需要想一想,或者我们考虑一个事情,就是每次死一个人概率的分母不会变,所以我们可以把它补阅读全文
posted @ 2019-05-29 08:54 ZH_comld 阅读(5) 评论(0) 编辑
摘要: 题解 可持久化$KMP$。 那个退回操作我们可以把它看做在操作树上$dfs$,所以我们可以先把这个树弄出来。 对于连续一段串的匹配问题。 我们可以搞个$KMP$自动机,输入当前节点编号也就是$nxt$,输入下一段连续的字符串,输出$nxt$跳完之后的值。 然后我们可以把这个字符串的$fail$树弄出阅读全文
posted @ 2019-05-28 21:44 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 如果只有加法没有减法,那么我们朴素进位的时间复杂度是均摊$O(1)$的。 那么减法的话我们维护一个增量的数,一个减量的数,就是一个存所有$a 0$的变量,一个存所有$a define N 1000002 using namespace std; typedef long long ll; ty阅读全文
posted @ 2019-05-28 11:38 ZH_comld 阅读(8) 评论(0) 编辑
摘要: 题解 先把点分树建出来。 对于吗,每一个询问$(l,r,x)$,我们对于x要找到它在点分树上最靠上的父亲节点使得两点之间的点在$l \sim r$中。 然后问题就变成了从一个根出发,可以经过$l \sim r$的点,能访问的颜色个数。 那么因为有了点分树,所以我们对于每个点$dfs$它的子树的复杂度阅读全文
posted @ 2019-05-28 07:25 ZH_comld 阅读(13) 评论(0) 编辑
摘要: 题解 区间不用种类的数的个数。 这个问题可以转化为对每个点维护一个$pre$,询问$l \sim r$中,有多少个位置是在$0\sim l 1$之间的。 这个问题可以用二维偏序做。 然后对于区间赋值的操作,可以证明,如果我们找到所有有变化的位置并且把它改掉,它的总更改次数为$O(n+m)$级别的。 阅读全文
posted @ 2019-05-27 18:49 ZH_comld 阅读(27) 评论(0) 编辑
摘要: 自闭 2阅读全文
posted @ 2019-05-27 18:39 ZH_comld 阅读(32) 评论(0) 编辑
摘要: 题解 神仙题。 练习赛的时候想了个假建图。 正解太神仙了。 先把不合法情况判掉。 先对时间离散化,每个时间点开一个点。 然后把他们一次串起来,中间连$(A,0)$的边。 我们先假设所有的飞机都停到$B$上了,然后对于每一架飞机,我们但开一个点。 设这个点为$now$,来的时间为$s$,走的时间为$t阅读全文
posted @ 2019-05-23 20:12 ZH_comld 阅读(12) 评论(0) 编辑
摘要: 自闭阅读全文
posted @ 2019-05-23 18:45 ZH_comld 阅读(18) 评论(0) 编辑
摘要: 题解 首先考虑一条链的情况。 $O O O O O$ 比如说这样一条链。 每个元素应当是这个元素到结尾这条子链中第一个被抽到的,这个概率手算一下发现它是 $$ \frac{p_i}{\sum_{j=i}^np_j} $$ 所以答案其实就是所有i的积。 $O OO O$ 如果出现这样的情况怎么办? 考阅读全文
posted @ 2019-05-23 10:16 ZH_comld 阅读(19) 评论(0) 编辑
摘要: 题解 非常有意思的一道题。 首先观察可得最终的不能继续操作的状态一定是所有边都连向$n$的。 我们还可以发现最优的操作一定是依次将每条边调整为连向$n$的。 所以最小的操作次数就是$n 3 $连向$n$的边的条数。 我们假设现在拿着一个多边形,我们把n这个点作为这个多边形的顶端,那么每条边都会有一个阅读全文
posted @ 2019-05-23 08:40 ZH_comld 阅读(130) 评论(0) 编辑
摘要: 题目大意: 给定一个数列,每次询问区间逆序对数,不强制在线。 题解: 如果不强制在线的话,我们可以离线下来搞一个莫队,每次指针左右移动的时候相当于查当前区间中有多少数比它大或者有多少数比它小,这个需要用树状数组维护,时间复杂度$O(n\sqrt{n}logn)$。 但是$300ms$跑不出来。。。 阅读全文
posted @ 2019-05-19 16:08 ZH_comld 阅读(20) 评论(0) 编辑
摘要: 有N个点(N=0那么这个点为定义为good。现在给这N个点间连上N 1条边,使它们构成一个生成树,定义树中的点为great点当且仅当这个点本身是good点且与其相邻的点中至少有另一个good点。树的价值等于树中所有great点的价值和。定义限制价值树是指价值不大于maxVal的树,问对给定的val[阅读全文
posted @ 2019-05-18 14:54 ZH_comld 阅读(13) 评论(0) 编辑
摘要: 题解 首先我们从$d(i,j)=0$的情况考虑,我们把所有这样的(i,j)缩到一起,那么对于每个缩好的联通块来说,所有$0$边权的边是可以连通整个联通块的。 这个方案数我们可以dp出来,设f表示i个点的合法联通块个数,g表示没有限制的合法联通块的个数。 $g[i]=(k+1)^{\frac{(i (阅读全文
posted @ 2019-05-18 09:17 ZH_comld 阅读(22) 评论(0) 编辑