02 2019 档案

摘要:"传送门" 有上下界最小费用可行流,行列建边变形。 行列建边相信大家都做过,没做过的可以看一下这个题: "bzoj3698XWW的难题" ,对应的我写的题解 "题解" 这个题需要变形一下,不只是单纯的对行列进行连边,首先对于一个空格,我们知道它最多影响2个线索:1个横向的和1个纵向的 所以我们可以对 阅读全文
posted @ 2019-02-28 17:37 蒟蒻--lichenxi 阅读(198) 评论(0) 推荐(0) 编辑
摘要:"传送门" 后缀排序裸题,SA上就是了 代码: c++ include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar(); !isdigit 阅读全文
posted @ 2019-02-27 20:58 蒟蒻--lichenxi 阅读(88) 评论(0) 推荐(0) 编辑
摘要:没脸扔传送门了 写个AC自动机的题目被爆搜卡住,最终我决定不写这个爆搜了,太恶心了 状态压缩dp! 直接设$f[i][j][S]为长度为i,当前为第j个节点,经过的密码状态为S$ 因为哪怕只有一个位置不确定都有两种位置可以填,一共就有26 2=52 42种情况 所以如果要输出方案,所有的密码串一定是 阅读全文
posted @ 2019-02-27 20:25 蒟蒻--lichenxi 阅读(118) 评论(0) 推荐(0) 编辑
摘要:"传送门" AC自动机上跑dp,首先想到正难则反 所以我们考虑不可读的字符串 设$f[i][j]$为长度为$i$,当前处理到第$j$个节点时的不可读字符串数 转移就很显然了 提示:如果一个节点的fail指针指向的节点中有一个是可读字符串的结尾节点,那么这个节点也是不可用的 代码: c++ inclu 阅读全文
posted @ 2019-02-26 21:57 蒟蒻--lichenxi 阅读(107) 评论(0) 推荐(0) 编辑
摘要:"传送门" 我也没想到map如此垃圾,bitset优秀啊 直接trie树上搜索就好了 代码: c++ include include include include include include using namespace std; void read(int &x) { char ch; b 阅读全文
posted @ 2019-02-26 17:18 蒟蒻--lichenxi 阅读(91) 评论(0) 推荐(0) 编辑
摘要:"传送门" 想到一个点上这个题目就没了:如果可以找到,那么必然是trie树上不经过病毒节点的一个环 接下来定义“病毒节点”:病毒节点就是病毒代码的最后一个字符,但是直接这样写会错,显然存在一个病毒代码是另一个病毒代码的子串的情况,那么一个病毒代码中就可能存在多个这样的病毒节点,怎么寻找呢?这就是一个 阅读全文
posted @ 2019-02-25 21:03 蒟蒻--lichenxi 阅读(99) 评论(0) 推荐(0) 编辑
摘要:"传送门" 看着就是裸的AC自动机是不是?会T一个点 然而。。。为什么放过暴力KMP和暴力find,理论复杂度$O(nm)$起步啊 AC自动机加一个树上差分就好啦,对于每个字符串的查询,实际上都是在fail树上每个点到根的路径上+1 fail树建出来就没了 代码: c++ include inclu 阅读全文
posted @ 2019-02-25 19:43 蒟蒻--lichenxi 阅读(134) 评论(0) 推荐(0) 编辑
摘要:"传送门" ac自动机模板题,裸的多串匹配 代码: c++ include include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar() 阅读全文
posted @ 2019-02-25 17:02 蒟蒻--lichenxi 阅读(104) 评论(0) 推荐(0) 编辑
摘要:"传送门" ac自动机模板,可能我写的ac自动机是有点问题的,所以跑的有些慢 暴力跳fail统计 代码: c++ include include include include include using namespace std; void read(int &x) { char ch; boo 阅读全文
posted @ 2019-02-25 17:00 蒟蒻--lichenxi 阅读(139) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2019-02-23 21:22 蒟蒻--lichenxi 阅读(2) 评论(0) 推荐(0) 编辑
摘要:"传送门" 这个题首先考虑什么时候是NIE 显然是存在一段$[l,r]$的人的总数 $k (r l+1+d)$ 此时显然并不好维护,毕竟不等式两边都与长度有关,长度这个因素不能忽略 拆括号之后移下项:$\sum_{i=l}^{r}v_i k k d$ 现在可以忽略长度了,左边显然就是最大连续子段和, 阅读全文
posted @ 2019-02-23 21:09 蒟蒻--lichenxi 阅读(140) 评论(0) 推荐(0) 编辑
摘要:"传送门" 权值线段树套区间线段树的裸题,加了离散化就好了 或者也可以整体二分 代码(树套树): c++ include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok 阅读全文
posted @ 2019-02-23 11:23 蒟蒻--lichenxi 阅读(115) 评论(0) 推荐(0) 编辑
摘要:"传送门" 典型的三维偏序,cdq分治 由于相同的花之间也会产生贡献,考虑将相同的花合并来做 代码: c++ include include include include using namespace std; void read(int &x) { char ch; bool ok; for( 阅读全文
posted @ 2019-02-22 17:14 蒟蒻--lichenxi 阅读(103) 评论(0) 推荐(0) 编辑
摘要:"传送门" 深入理解了一波后缀数组,这东西真的很妙诶,自己推感觉完全不现实,看来只能靠背代码了 这段时间就多敲敲,把板子记熟吧 代码: c++ include include include include using namespace std; void read(int &x) { char 阅读全文
posted @ 2019-02-22 14:20 蒟蒻--lichenxi 阅读(108) 评论(0) 推荐(0) 编辑
摘要:"传送门" 状压dp,最短路 spfa似乎特别慢 代码: 阅读全文
posted @ 2019-02-21 20:36 蒟蒻--lichenxi 阅读(133) 评论(0) 推荐(0) 编辑
摘要:"传送门" 极其简单的dp题 代码: c++ include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar(); !isdigit(ch); ch=getc 阅读全文
posted @ 2019-02-21 18:19 蒟蒻--lichenxi 阅读(143) 评论(0) 推荐(0) 编辑
摘要:传送门 自己的计算几何还是挺渣的呢。 其实只要考虑一下叉积的式子就可以想到前缀和了,但是显然需要按照极角序来做才能去掉绝对值 代码: #include<cstdio> #include<iostream> #include<algorithm> using namespace std; void r 阅读全文
posted @ 2019-02-21 13:46 蒟蒻--lichenxi 阅读(89) 评论(0) 推荐(0) 编辑
摘要:"传送门" 自己想的方向一直是对的,但是一直没有完全正确 我一直没发现可以缩掉一维 原本列出的dp方程是这样的 $f[i]=f[j]+1(j include include include using namespace std; void read(int &x) { char ch; bool 阅读全文
posted @ 2019-02-20 21:24 蒟蒻--lichenxi 阅读(95) 评论(0) 推荐(0) 编辑
摘要:"传送门" 考虑根节点的移动,移动到相邻节点对深度和的影响是很显然的 假设从$u$移动到$v$ 显然有$f[v]=f[u]+n 2 size[v]$ 先定下一个根节点$x$,求出$f[x]$,然后在dfs一遍进行换根转移就行了 dfs过程中更新答案 代码: c++ include include u 阅读全文
posted @ 2019-02-19 21:24 蒟蒻--lichenxi 阅读(253) 评论(0) 推荐(0) 编辑
摘要:"传送门" 看到数据范围这么小,不由得算了一下暴力复杂度,算出来情况一共只有1e7,不多,再乘上暴力判断的复杂度,好像T了,判断的话位运算可以方便解决 但是我写的优化似乎比较渣,还留了个log,但是还是n那么小,log可以忽略不计了吧 代码: c++ include include include 阅读全文
posted @ 2019-02-19 13:41 蒟蒻--lichenxi 阅读(109) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2019-02-19 10:55 蒟蒻--lichenxi 阅读(2) 评论(0) 推荐(0) 编辑
摘要:"传送门" 这个题好难卡啊。 看到这种题自然会想到字符串hash是不是,但是对于每次操作造成的影响需要$O(n)$的时间去更新,自然是不优的 可以发现这个更新可以用数据结构来维护,对于每个hash值开一颗线段树之类的支持区间修改的数据结构 然后就可以愉快的解决了 注意: 1、hash值请使用map和 阅读全文
posted @ 2019-02-18 13:51 蒟蒻--lichenxi 阅读(236) 评论(0) 推荐(0) 编辑
摘要:"传送门" 可以知道一共最多只有3种情况:基环树,环,自环 先考虑最少杀死: 首先发现入度为0的点一定能活下来,那么入度为0的点指向的人一定会死,他指向的人指向的人如果入度为0就一定能活下来(其实是不一定的,但是要保证死的人最少) 这样就可以拓扑排序写一下了,剩下的就是环的情况了,能活下来的显然是$ 阅读全文
posted @ 2019-02-17 14:54 蒟蒻--lichenxi 阅读(158) 评论(0) 推荐(0) 编辑
摘要:"传送门" 提示:被删掉的点也要算点对,$(i,j)$和$(j,i)$是不同的点对 显然找出割点就行了,记下size,对于各子树统计一下答案 代码: c++ include include include using namespace std; void read(int &x) { char c 阅读全文
posted @ 2019-02-17 11:48 蒟蒻--lichenxi 阅读(151) 评论(0) 推荐(0) 编辑
摘要:"传送门" 异常激动,跑了bzoj的rank2 这个题一共有两个要求,先考虑第二个要求,可以知道每一次修改都会导致答案账户余额+2/ 2 所以修改方案是唯一的,可以$O(1)$算出来 然后考虑第一个要求,显然有结论:如果当前值为负,你可以修改当前位置之前的一个负号为正号,并且修改当前位置之后的一个正 阅读全文
posted @ 2019-02-16 17:35 蒟蒻--lichenxi 阅读(140) 评论(0) 推荐(0) 编辑
摘要:"传送门" 读入输出题,看样例解释得出结论,具体原因不详 代码: 阅读全文
posted @ 2019-02-16 16:07 蒟蒻--lichenxi 阅读(92) 评论(0) 推荐(0) 编辑
摘要:"传送门" 很容易发现和置换有关系,然后就可以推出在一个置换内,用代价最小的那个去做就行了 但是这不一定是最优的(我一开始也只考虑了这个,悲催的wa了) 看了篇题解发现还有一种情况没考虑 就是你可以选择用全局代价最小的交换到一个置换内,可以知道交换置换内代价最小的是最优的,然后做完再交换出来就行了 阅读全文
posted @ 2019-02-16 15:46 蒟蒻--lichenxi 阅读(145) 评论(0) 推荐(0) 编辑
摘要:"传送门" 很显然的结论题啊,只要图中有环就一定可行,但是题目不保证联通,所以可能有多个联通块,需要分别判,dfs和并查集都行 洛谷要求输出方案,这个就把环找出来弄一弄就好了 代码(无输出方案): 阅读全文
posted @ 2019-02-16 14:08 蒟蒻--lichenxi 阅读(115) 评论(0) 推荐(0) 编辑
摘要:"传送门" 阶梯nim模型 代码: 阅读全文
posted @ 2019-02-16 12:59 蒟蒻--lichenxi 阅读(134) 评论(0) 推荐(0) 编辑
摘要:"传送门" sb单调栈,唯一要注意的是高度相同的时候不需要更新答案 代码: c++ include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar(); !i 阅读全文
posted @ 2019-02-16 12:04 蒟蒻--lichenxi 阅读(79) 评论(0) 推荐(0) 编辑
摘要:"传送门" 很显然看的出是中位数吧,那只要动态维护一下中位数和区间和就差不多了吧 平衡树太难写,我选择权值线段树 洛谷的这个题要输出方案,但是不打紧 代码(bzoj): c++ include include include using namespace std; void read(int &x 阅读全文
posted @ 2019-02-16 12:02 蒟蒻--lichenxi 阅读(157) 评论(0) 推荐(0) 编辑
摘要:"传送门" 有个非常显然的技巧,就是你可以反向建图,并且将图上下翻转,如果$i$能到其他所有道路,其他所有的道路也能到$i$ 这有什么好处呢,这就可以使$i$可以非常方便的转移到$i+1$ 我们设$f[i]$为$i$左边至少要建的公路数,然而$f[i]=i 1 lis$ 所以只要求lis就行了,树状 阅读全文
posted @ 2019-02-15 17:37 蒟蒻--lichenxi 阅读(111) 评论(0) 推荐(0) 编辑
摘要:"传送门" 很显然的结论,$(x,y)$与$(y,x)$关于$y=x$对称 那么就可以知道所有点一定是在直线的一侧(暂时不考虑移动石子的代价),这样得出来的就是最小的篱笆长度 有一些点可以不需要动,那么第二问分四种情况讨论即可 代码: c++ include include include incl 阅读全文
posted @ 2019-02-15 13:40 蒟蒻--lichenxi 阅读(144) 评论(0) 推荐(0) 编辑
摘要:"传送门" 很显然有一个结论:最大不过1,最小不过 1 然后dp,设$f[i][j]$为满足前$i$个不下降,当前放的是$j 2$,转移就比较好想了 具体方程看代码吧,终于有一个自己会写的题了 代码(写了好多没用的min): c++ include include include include u 阅读全文
posted @ 2019-02-14 17:36 蒟蒻--lichenxi 阅读(126) 评论(0) 推荐(0) 编辑
摘要:"传送门" 这个题比较水,很容易看出 1、最短路小于d,直接看奇偶性就好了 2,最短路大于d,puts("NIE\n"); 主要就是判奇偶性的问题,将每个点拆成奇点和偶点跑bfs就行了 在线需要开short,不然空间会炸,离线就没有这个忧虑 代码: c++ include include inclu 阅读全文
posted @ 2019-02-14 16:42 蒟蒻--lichenxi 阅读(194) 评论(0) 推荐(0) 编辑
摘要:"传送门" 这道题要将图形转化为字符串,可以发现,只要角相同,边长相同就存在一条对称轴,所以只要转换成字符串S,倍长为SS,拿反串匹配一下就好了。 代码: c++ include include include include using namespace std; void read(int & 阅读全文
posted @ 2019-02-14 15:52 蒟蒻--lichenxi 阅读(176) 评论(0) 推荐(0) 编辑
摘要:"传送门" 线段树套线段树会TLE+MLE! 树状数组不仅空间小,常数也小(我写的除外) 思考一下求逆序对需要的条件,树套树就过了 代码: c++ include include include include using namespace std; void read(int &x) { cha 阅读全文
posted @ 2019-02-14 09:43 蒟蒻--lichenxi 阅读(88) 评论(0) 推荐(0) 编辑
摘要:"传送门" 虚树裸题,建完虚树上tree dp就好了 代码: 阅读全文
posted @ 2019-02-13 13:53 蒟蒻--lichenxi 阅读(122) 评论(0) 推荐(0) 编辑
摘要:"传送门" 这是我第二次看见这个题目了,第一次看见是另一场比赛的A题,想了一个小时不会写就弃了 从来没想过这个题能这么玩 线段树上记录根到叶子节点的距离 初始线段树上先记下根节点1到各叶子节点的距离 先离线,然后dfs整颗树,在dfs过程中考虑根的移动对线段树的影响 如果当前点是查询点,在当前线段树 阅读全文
posted @ 2019-02-12 16:23 蒟蒻--lichenxi 阅读(158) 评论(0) 推荐(0) 编辑
摘要:"传送门" 我一开始以为每个位置只有可能是2个值,然后就GG了 然后摸了一眼题解,这tm怎么这个简单 仔细观察它的式子$c_i=c_{i 1}+c_{i+1} c_i$ 和差分有点像,看看差分数组$d_i=c_i c_{i 1}$ 容易发现每一次操作都是将$d_i$与$d_{i+1}$交换了 那么只 阅读全文
posted @ 2019-02-12 13:12 蒟蒻--lichenxi 阅读(106) 评论(0) 推荐(0) 编辑
摘要:"传送门" 我觉得这个题特别水啊,就是自己不会写而已 只要想到每三个连续的可以转化,这题就差不多了 所以每种连续的最多出现2次,直接dp就行了 代码: 阅读全文
posted @ 2019-02-12 10:44 蒟蒻--lichenxi 阅读(107) 评论(0) 推荐(0) 编辑