12 2018 档案
摘要:C HSI 题解 $E = 1900 (N M) + 100 M + \frac{1}{2^{M}} E$ $E = 2^{M}(1900 (N M) + 100 M)$ 代码 cpp include define fi first define se second define pii pair
阅读全文
摘要:A AKIBA 模拟即可 代码 E Combination Lock 题解 处理成差分,对称位置的差分和为0 例如abcba 可以得到的差分是 相当于数列 0123210 111 1 1 1 而有区间加呢,相当于在前面打了一个+1,后面打了一个 1 我们把这两个位置连边 并且给所有对称位置连边 合法
阅读全文
摘要:C Not so Diverse 题解 选出现次数K多的出来,剩下的都删除即可 代码 cpp include define fi first define se second define pii pair define pdi pair define mp make_pair define pb
阅读全文
摘要:C Good Sequence 题解 用个map愉悦一下就好了 代码 E Prefix free Game 给每个可以走的点的sg函数简单推一下,从第(L 1)层开始归纳 很容易发现sg函数是lowbit(L dep) 代码 cpp include define fi first define se
阅读全文
摘要:C Multiple Gift 题解 首项是X,每次乘个2,暴力统计 代码 E Papple Sort 题解 只要每次把靠边的一个字符的匹配点找出来同样后移然后一起删除即可 就是讨论一下 ...A...A...B...B.. A要和这个一对B交换两次 B如果要过去也要换两次,所以都一样 A..B..
阅读全文
摘要:C Product and GCD 题解 直接分解质因数,然后gcd每次多一个质因数均摊到每个$N$上的个数 代码 cpp include define fi first define se second define pii pair define mp make_pair define pb p
阅读全文
摘要:A Move and Win 题解 看两个人相遇的时候谁先手即可,相遇之后第一个移动的人必输 代码 B Ice Rink Game 题解 二分直接判断即可 代码 E Encoding Subsets 题解 这题很迷,复杂度很迷 记录$f(S)$表示$S$字符串的答案 然后要么第一个字符不要$f(S)
阅读全文
摘要:A Irreversible operation 题解 把每个B后面的W个数累加起来即可 代码 B Powers of two 题解 这比赛打的太难受了 这个我花了一个树结构,蒙了一个dp,然后wa了,去硬上T2 最后发现我把一个N改成离散化后的tot就A了 就是考虑一个点,和它组成恰好大于它的$2
阅读全文
摘要:题解 就是线段树维护一下转移矩阵 分成两种情况,一种是前面有两个联通块,一种是前面有一个联通块 从一个联通块转移到一个联通块 也就是新加一列的三个边选其中两条即可 从一个联通块转移到两个联通块 不连竖着的那条边,横着的两条边转移一条短的即可 从两个联通块转移到一个联通块 新加的一列三个边全连上 从两
阅读全文
摘要:题解 直接二分然后建图跑网络流看看是否合法即可 就是源点向每个激光武器连一条二分到的时间×激光武器每秒攻击值的边 每个激光武器向能攻击的装甲连一条边 每个装甲向汇点连一条装甲值的边 代码 cpp include define fi first define se second define pii
阅读全文
摘要:题解 还以为是啥毒瘤题 然后是个搜索题 复杂度算起来挺大 然后跑起来就连0.1ms不到= = 就是从大到小进行每种操作,搜出来一种操作就乘上一个操作数的阶乘就行 如果现在进行的操作操作$2^i$那么大的段,那么就把序列分成每段$2^{i + 1}$长,看看每段是否连续 如果都连续这次操作就跳过 如果
阅读全文
摘要:题解 事实上是个分块暴力 就是跳跃长度大于$\sqrt{n}$的狗最多有$\sqrt{n}$个位置 剩下跳跃长度小于$\sqrt{n}$的暴力记录 也就是两个$dis$数组 $dis[0][i][j]$表示第$i$个位置有跳跃长度为$j$的狗 $dis[1][i][j]$表示第$i$只狗在自己的第$
阅读全文
摘要:题解 ~~感觉自己通过刷水题混LOJ刷题量非常成功~~ 首先是二进制枚举位,判是否合法 要写两个solve不是很开心,$A$不为1的直接记录状态$f[i][j]$为能否到达前$i$个分成$j$段,转移$n^3$ $A$为1的相当于在一张拓扑图上求到$N$的最短路是否小与$B$,连边方式即为如果$su
阅读全文
摘要:题解 显然有个很暴力的dp,$dp[i][j]$表示选到第$i$个数,末尾的数是$j$的方案数 但是第二维就开不下了,怎么办呢 考虑离散化整个区间,我们记录$dp[i][j][k]$表示选到第$i$个点,选到第$j$个区间,这个区间选了$k$个数 转移的时候记录一个$sum[j][k]$表示$i 1
阅读全文
摘要:题解 这个听起来很毒瘤的想法写起来却非常休闲,理解起来可能很费劲 例如,我们首先到猜到答案是个下凸包 然后是不是要三分???然而并不是orz 我们通过归纳证明这个下凸包的结论来总结出了一个算法 也就是对于每个子树是一个凸包,我们进行两种操作,一种操作是我给这个子树加了一个父亲边 另一种操作是对所有儿
阅读全文
摘要:题解 成功把自己写自闭了 离散化之后再二分我是真不会算坐标啊我这个zz 先离散化所有坐标,然后对于每个位置维护一个最小前驱,然后线段树区间维护最小前驱 什么?位置一样?那就给每个大小为1的位置开个multiset,往上维护的时候就直接左右区间取min 然后就是,在线段树上二分了 我们把正无穷和负无穷
阅读全文
摘要:题解 第一个子任务直接询问最大最小,每次可以问出来两个,再最大最小 1再问两个,最多问$\frac{N + 1}{2}$次就还原出了序列 第二个子任务由于差分肯定会大于等于$\lceil \frac{mx mn}{N 1} \rceil$ 那么我们直接把序列最大最小按照这个值分块,只用两个块之间的差
阅读全文
摘要:题解 我们把这个多边形三角形剖分了,和统计多边形面积一样 每个三角形有个点是原点,把原点所对应的角度算出来,记为theta 对于一个点,相当于半径为这个点到原点的一个圆,圆弧上的弧度为theta的一部分 相当于一条直线和这个小圆弧求交,直接算出有交的角度然后累加最后除2PI即可 可以拿余弦定理爆算(
阅读全文
摘要:题解 感觉智商为0啊QAQ 显然对于一个长度为$len$的border,每个点同余$n len$的部分必然相等 那么我们求一个$f[a]$数组,如果存在$s[x] = 0$且$s[y] = 1$且$|x y| = a$ 这个很好求,只要把0和1分别挑出来,NTT卷一下就好了 一个$len$合法,即它
阅读全文
摘要:题解 想出70的大众分之后就弃疗了,正解有点神仙 就是首先有个比较显然的结论,就是要么是一直往左走,要么是走一步右边,然后一直往左走 根据这个可以结合RMQ写个70分的暴力 我们就考虑,最优的话显然是走一步左边就到了目标点,第二步才开始有分叉 假如我们先走了一步左边,然后就变成了,从$L[x]$开始
阅读全文
摘要:题解 什么,我这题竟然快到了LOJ rk1???? 搜起来有点麻烦,不过感觉还是比斗地主好下手(至今没敢写斗地主 首先是暴力搜牌型,最多$3^{16}$(什么判解还要复杂度怂成一团)的样子?? 然后判牌型,显然只要考虑单牌,和3 + x,4+2 然后暴力搜网友的3和4 暴力搜jry的3和4 然后枚举
阅读全文
摘要:题解 神仙的状压啊QAQ 设一个$f[S]$表示数字的集合为$S$时$sum[S]$为前缀最大值的方案数 $g[S]$表示数字集合为$S$时所有前缀和都小于等于0的方案数 答案就是$sum_{S} sum[S] f[S] g[2^{N} 1 S]$ 求$f$每次相当于往前面插入一个数,如果$sum[
阅读全文
摘要:题解 简单分析一下,如果这个选手成绩是0,直接输出$\binom{n}{k}$ 如果这个选手的成绩没有被翻倍,那么找到大于等于它的数(除了它自己)有a个,翻倍后不大于它的数有b个,那么就从这$a + b$个选手里找翻倍选手使得它排名不变 答案是$\binom{a + b}{K}$ 如果这个选手成绩翻
阅读全文
摘要:题解 传说中的……半标准杨表(行单调不增,列单调减) 如果N能整除M,我们把序列分成$\frac{N}{M}$段 然后里面要填K个1,显然我每一段必须填K个1,且可以构造出合法的序列,所以最少要填$K\frac{N}{M}$个1 我们列出一个K行$\frac{N}{M}$列的矩阵,$(i,j)$表示
阅读全文
摘要:题解 可以想一下保留一个长度为k的不降序列方案数是$f[k] (n k)!$ $f[k]$是有多少个长度为k的不降序列 我们去掉不合法的,一定是前一次操作的时候有一个长度为$k + 1$的不降序列,于是长度恰好为$k$的方案数就是 $f "k" ! f "k + 1" !(k + 1)$ $f[k]
阅读全文
摘要:题解 区间dp,先离散化所有价值 $f[i][j][k]$表示$[i,j]$区间里最小值为$k$的价值最大是多少 只考虑$i =k] + cost(k) + f[h + 1][j][ =k])$ 构造答案的时候通过记录每个点前一个转移点来递归即可 代码 cpp include define fi f
阅读全文
摘要:题解 $f(n)$的取值范围最多$9^2 18$ 直接枚举判断就好 代码 cpp include define fi first define se second define pii pair define pdi pair define mp make_pair define pb push_b
阅读全文
摘要:题解 和BZOJ4025挺像的 就是维护边权是时间的最大生成树 删边直接删 两点未联通时直接相连,两点联通则找两点间边权小的一条边删除即可 代码 cpp include define fi first define se second define pii pair define pdi pair
阅读全文
摘要:题解 lct维护一个结束时间作为边权的最大生成树,每次出现奇环就找其中权值最小的那条边,删掉的同时还要把它标记上,直到这条边消失 如果有标记则输出No 边权通过建立虚点来维护 代码 cpp include define fi first define se second define pii pai
阅读全文
摘要:题解 我现在真是太特么老年了 一写数据结构就颓废,难受 这题就是用lct维护子树 ???lct怎么维护子树 这样想,我们给每个点记录虚边所在的子树大小,只发生在Access和link的时候 这样的话我们在这两个操作的时候顺带维护一下就好了 Access的时候加上新的虚儿子,减掉变成实边的那个儿子 l
阅读全文
摘要:题解 老年选手的代码康复计划QAQ 这题又没一遍A,难受 每个节点维护这个节点子树内联通块的大小 维护所有节点轻儿子的$g[u][0]$表示所有轻儿子白色的联通块总数 $g[u][1]$表示所有轻儿子黑色联通块总数 更新一个点为新颜色的时候,是$g[u][c[u] ^ 1] + 1$再加上重儿子价值
阅读全文
摘要:题解 给你一棵基环树,环长为奇数(两点间最短路径只有一条) 维护两点间路径最大子段和,支持把一条路径上的值取反 显然只要断开一条边维护树上的值,然后对于那条边分类讨论就好了 维护树上的值可以通过树链剖分,然后对于左右附加一个值和区间跑最大子段和 把变量名打错了orz,死亡 代码
阅读全文
摘要:题解 练习一下带修改莫队 先按照左端点的块排序,再按照右端点的块排序,然后按照时间排序 每个修改操作存一下修改前这个位置的值就可以逆序操作了 代码 cpp include define fi first define se second define pii pair define pdi pair
阅读全文
摘要:题解 又写了一遍KM算法,这题刚好是把最大最小KM拼在一起写的,感觉比较有记录价值 感觉KM始终不熟啊QAQ 算法流程大抵如下,原理就是每次我们通过减少最少的匹配量达成最大匹配,所以获得的一定是最大价值 1.我们先给左部点求一个期望大小,如果是最大KM,期望大小就是最大的那条边的权值,如果是最小KM
阅读全文
摘要:题解 每种字符跑一遍FFT,得到$i + j = k$时匹配的个数(要÷2,对于相同位置的最后再加上 然后算出$2^{cnt[k]}$的和,最后再减去用mancher匹配出的连续回文子串的个数即可 代码
阅读全文
摘要:题解 二分一个横坐标,过这个横坐标做一条和y轴平行的直线,相当于在这条直线上做区间覆盖,如果区间有交的话,那么答案是True 否则的话取两个不相交的区间,如果这两个圆相离或相切则不合法 否则看看相交的部分在二分的横坐标的左边还是右边,进行更新 代码 cpp include define fi fir
阅读全文
摘要:题解 Ca Fe Zn Se 显然我们既然初始矩阵就能通过线性变换变成单位矩阵,则该矩阵一定有逆 没有逆输出NIE 而且因为这些向量两两正交,则表示一个向量的时候表示方法唯一 那么我们求一个逆可以求出这个矩阵消成单位矩阵的线性表示,再拿第二个矩阵和逆矩阵相乘可以得到第二个矩阵每个行向量用第一个矩阵的
阅读全文
摘要:题解 我们考虑列出期望方程组,$dp[i][j]$表示在第$i$个点血量为$j$的时候到达$N$点的概率,所有的$dp[N][j]$都是1,所有$j define fi first define se second define pii pair define pdi pair define mp
阅读全文
摘要:题解 学习一下矩阵求逆 就是我们考虑这个矩阵 $AA^{ 1} = I$ 我们相当于让$A$乘上一个矩阵,变成$I$ 我们可以利用初等行变换(只能应用初等行变换,或只应用初等列变换) 分三种 1.矩阵的两行互换 2.矩阵的一行加上k倍的另一行 3.矩阵的一行都乘上某个数 其实行变换的本质也可以写成一
阅读全文
摘要:题解 什么破题,看一眼就能想出来$n^2 2^n$看了一眼数据范围有点虚,结果跑得飞快= = 处理出$a[i][j]$表示从$i$到$j$经过的点的点集 然后$f[i][S]$表示最后一个点在$i$处,经过的点集为$S$,方案数是多少 然后枚举一个不在$S$中的点$j$看看$a[i][j]$是否全部
阅读全文
摘要:题解 简单分析一下,有$k$个环肯定是,我拆掉了$k 2$个,留最左两个,1步拆掉最左的,这个时候我还要把这$k 2$个环拼回去,拆一次$k 1$ 所以方案数就是$f[k] = f[k 1] + 2 f[k 2] + 1$ 然而太简单了,简单的都不是省选题了,所以他没让你取模= =,让你写FFT的高
阅读全文
摘要:题解 每个数都处理成前缀和,就相当于问$[l 1,r]$有几个数对$x,y$,$sum[x] ^ sum[y] = k$ 直接莫队即可 代码 cpp include define fi first define se second define pii pair define pdi pair de
阅读全文
摘要:题解 有毒吧 这题$O(n)$过不去 非得写$O((a + b)^3\log n)$的矩乘,同样很卡常 把$x$换成$n y$ 我们拆完式子发现是这样的 $\sum_{i = 0}^{a} ( 1)^{a + b i} y^{a i} n^{i} \binom{a}{i}$ 所以我们设$f[i][k
阅读全文
摘要:题解 基尔霍夫矩阵,外向树是入度矩阵 邻接矩阵 必须删掉第一行第一列然后再求行列式 代码 cpp include define fi first define se second define pii pair define pdi pair define mp make_pair define p
阅读全文
摘要:题解 BSGS直接解出a和b来即可 代码
阅读全文
摘要:C Traveling 先看能不能走到,再看看奇偶性是否相同 D Checker 我们计算右下角在$( 2k, 2k)$到$( 1, 1)$这个区域内,每个点所在的格子的颜色 发现根据右下角的位置会分成九个小块,把九个小块里的颜色和需求一样的矩阵用差分矩阵加,最后统计前缀和中最大的即可 cpp in
阅读全文
摘要:C Candies 前一枚举一个i,求第一行的前i个和第二行从第n个到第i个 代码 cpp include define fi first define se second define pii pair define pdi pair define mp make_pair define pb p
阅读全文
摘要:题解 这个乘积比较麻烦,转换成原根的指数乘法就相当于指数加和了,可以NTT优化 注意判掉0 代码
阅读全文
摘要:题解 我们只考虑给每个点买一个,之后每个点就可以用最低价格买了 根据最小树形图的算法,就是不断给每个点入度的边找一条最小的 如果构成了树形图就退出,否则把形成了环的点缩成一个点,加上环的权值,然后把指向环中点的弧变成弧长减去环中指向该点的弧的长度 重标号让代码显得好难看啊QAQ 代码 cpp inc
阅读全文
摘要:A Two Integers 如果$X$是$Y$的倍数的话不存在 可以输出$X \cdot (\frac{Y}{gcd(X,Y)} 1)$ 代码 B Two Arrays a b的话不可能再小于b了,所以我们看看在用所有位置的a增加不超过b的位置的情况下,能一共给b增加多少,如果这个增加数大于所有a
阅读全文
摘要:题解 写后缀树真是一写就好久,然后调好久QAQ 我们把两个串取反拼一起建后缀树,这样的话使得后缀树是正串的后缀树 然后我们把询问挂在每个节点上,每次线段树合并,对于大于50的每次暴力跳着在线段树找,对于小于50的建出一棵树来,也就是$a[i][j]$表示第$i$位往后$j$位,向下一个$a[t][j
阅读全文
摘要:题解 简单容斥题 至少选了$k$个颜色恰好出现$S$次方案数是 $F[k] = \binom{M}{k} \frac{N!}{(S!)^{k}(N i S)!}(M k)^{N i S}$ 然后恰好$k$个颜色恰好出现$k$次就是 $g[k] = \sum_{j = k}^{M} ( 1)^{k j
阅读全文
摘要:题解 好神仙的题啊 感觉转二维平面能想到,算重复情况的方法真想不到啊 通过扒stdcall代码获得的题解QAQQQQ 我们先把$p_i$正串反串建出一个AC自动机来 然后我们把s串放在上面跑匹配,正着跑一遍,反着跑一遍,我们就得到了$s$中每个位置正着和反着能匹配到的节点编号 然后对于AC自动机,我
阅读全文