<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[thy的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/thy_asdf</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; thy_asdf]]></copyright><item><title><![CDATA[bzoj4259: 残缺的字符串]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51800097</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51800097</guid><author>thy_asdf</author><pubDate>Fri, 01 Jul 2016 11:56:04 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=4259
思路：FFT是一种高效的字符串匹配算法
只要想到FFT就好办了
令为‘*’的位置值为0
那么两个字符串匹配当且仅当
Σ(a[i]-b[i])^2*a[i]*b[i]=0
式子的含义很好理解，前面就是字符相同，后面就是该位是否为通配符
为了FFT能做，我们要把A串反过来才有]]></description><category></category></item><item><title><![CDATA[bzoj1417: Pku3156 Interconnect]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51760299</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51760299</guid><author>thy_asdf</author><pubDate>Sat, 25 Jun 2016 21:50:53 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=1417
思路：
注意到每个点没有什么区别，我们关心的只是联通情况
我们可以用每个连通块的大小来表示状态
30的整数拆分数是5604,也就是说最多有5604种状态
这些状态之间的转移关系显然是DAG
转移方程：
设当前状态S={C1,C2...C[m]}的合并两个连通块的后继状态为]]></description><category></category></item><item><title><![CDATA[bzoj2720: [Violet 5]列队春游]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51760280</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51760280</guid><author>thy_asdf</author><pubDate>Sat, 25 Jun 2016 21:49:32 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=2720

思路：
利用期望的线性性，可以转为求每个人的期望
设每个人能看到的距离为di
E[Σdi]=ΣE[di]
考虑怎么求每个人的期望
设sum[i]表示身高小于i的身高的人数
枚举位置，再枚举长度即可
 
但其实我们可以不用枚举位置，每个位置(如果足够长)其实是一样的]]></description><category></category></item><item><title><![CDATA[bzoj2698: 染色]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51760268</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51760268</guid><author>thy_asdf</author><pubDate>Sat, 25 Jun 2016 21:47:10 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=2698
思路：
令xi=1,col=white
  　=0,col=black
E[X]=E[Σxi]=ΣE[xi]
因为只要覆盖一次就算覆盖，所以直接算不太方便
考虑每个点m次不被覆盖的概率
就是一次不被覆盖的概率的m次方
#include
#include
#include]]></description><category></category></item><item><title><![CDATA[后缀自动机总结]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51569443</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51569443</guid><author>thy_asdf</author><pubDate>Thu, 02 Jun 2016 21:53:41 +0800</pubDate><description><![CDATA[后缀自动机总结
后缀自动机的构造和相关性质及复杂度证明可以看陈老师的ppt
时间复杂度据说可以用均摊分析证明是O(n)的

一开始看直接看陈老师的ppt确实有点难以理解，但是陈老师的ppt确实是讲的最正规的一个
一些定义：right集合：后缀自动机中节点代表的子串的右端点位置构成的集合
　　　　　mins/maxs：节点代表的串的最短长度和最长长度



现在开始进入正题：
]]></description><category></category></item><item><title><![CDATA[刷题时间记录]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51531128</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51531128</guid><author>thy_asdf</author><pubDate>Sun, 29 May 2016 12:21:12 +0800</pubDate><description><![CDATA[5.29
bzoj2882
开始时间：11:37
写完时间：11:54
AC时间：12:17]]></description><category></category></item><item><title><![CDATA[搬家啦]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51408915</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51408915</guid><author>thy_asdf</author><pubDate>Sat, 14 May 2016 22:04:24 +0800</pubDate><description><![CDATA[本博客搬至：http://www.cnblogs.com/thythy/]]></description><category></category></item><item><title><![CDATA[bzoj3667: Rabin-Miller算法]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51347390</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51347390</guid><author>thy_asdf</author><pubDate>Sun, 08 May 2016 22:39:04 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=3667
思路：首先我们说说Miller_Rabin算法
我们发现了费马小定理
那它倒过来对不对呢
如果a^(p-1)=1(mod p),那么p一定是素数吗？
很不幸，是错的
虽然出错概率很低，但是可以被卡
于是我们就给它打补丁
我们又找到了一个二次探测的方法
如果p是质数，那]]></description><category></category></item><item><title><![CDATA[bzoj3205: [Apio2013]机器人]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51347326</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51347326</guid><author>thy_asdf</author><pubDate>Sun, 08 May 2016 20:08:18 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=3205
思路：类似斯坦纳树的想法
但是因为这里的合并必须连号
所以子集枚举就变成了区间合并


说说做法好了
首先记搜搜出每个点向四个方向走一步会到哪里
注意：转向器可能导致机器人一直在里面转出不来，要特判掉
然后设f[l][r][x][y]表示当前合并的机器人是[l,r]，]]></description><category></category></item><item><title><![CDATA[bzoj4006: [JLOI2015]管道连接]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51347283</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51347283</guid><author>thy_asdf</author><pubDate>Sun, 08 May 2016 19:56:07 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=4006
思路：
一眼看上去很像斯坦纳树
但是限制稍有不同，只要每种颜色的点联通即可
也就是说最后可能是森林
我听说裸写斯坦纳树有90


所以我们要在外面再套一层DP
f[i][j]还是斯坦纳树的状态，i是以i为根，j是状态为j
先用斯坦纳树求出每种联通状况的最小费用
再]]></description><category></category></item><item><title><![CDATA[bzoj2595: [Wc2008]游览计划]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51347191</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51347191</guid><author>thy_asdf</author><pubDate>Sun, 08 May 2016 19:47:25 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=2595
思路：斯坦纳树
斯坦纳树问题就是给你n个点的图，点或边上有权值，有k个点是关键点
求使k个关键点联通且权值和最小的方案
我们知道最后的结果一定是一棵树
DP状态就是f[i][j]表示以i为根，关键点联通性为j(一个二进制数，1为以联通，0为未联通)
那么转移有两种
枚举子]]></description><category></category></item><item><title><![CDATA[bzoj4262: Sum]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51248560</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51248560</guid><author>thy_asdf</author><pubDate>Tue, 26 Apr 2016 10:41:54 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=4262
思路：写这题之前推荐先写uoj164
也是维护一个函数性质标记
题解见：http://www.cnblogs.com/clrs97/p/4824806.html

#include
#include
#include
#include
typedef long long ll]]></description><category></category></item><item><title><![CDATA[uoj#164. 【清华集训2015】V]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51248405</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51248405</guid><author>thy_asdf</author><pubDate>Tue, 26 Apr 2016 10:37:17 +0800</pubDate><description><![CDATA[传送门：http://uoj.ac/problem/164
思路：科学的题面：
请你写一个数据结构支持以下功能：
1：区间[l,r]加x
2：区间[l,r]减x并和0取max
3：区间覆盖
4：单点询问
5：单点历史最大值询问


线段树维护分段函数
标记就是一个二元组(a,b)表示标记生效后x=max(x+a,b)
1操作就是打(x,0)的标记
2就是(-x,0)
3]]></description><category></category></item><item><title><![CDATA[bzoj2653: middle]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51248226</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51248226</guid><author>thy_asdf</author><pubDate>Tue, 26 Apr 2016 10:14:43 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=2653
思路：陈老师的题
可持久化线段树的又一种应用
对于每次询问，二分答案
我们怎么知道它是大于中位数还是小于中位数呢？
我们把每个小于它的赋成-1，大于等于赋为1
查询左端点在[a,b]右端点在[c,d]的区间的最大子段和
若小于0，则偏大，大于等于0，偏小或者正好
我们建]]></description><category></category></item><item><title><![CDATA[APIO2015&2014题解]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51247686</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51247686</guid><author>thy_asdf</author><pubDate>Tue, 26 Apr 2016 10:03:20 +0800</pubDate><description><![CDATA[传送门：似乎uoj都有
思路：
APIO2015：
巴厘岛的雕塑：
看到位运算，又要求结果最小，最外层肯定是个从高位到低位的按位贪心
这里有两个部分分，
task1:N
task2:N


先考虑task1
令sum[i]表示雕塑权值的前缀和

假设我们考虑到了第bit位
那么我们怎么知道在前面位数满足要求的前提下，当前位能否是0
DP即可
设f[i][j]表示前i]]></description><category></category></item><item><title><![CDATA[bzoj1975: [Sdoi2010]魔法猪学院]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51220920</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51220920</guid><author>thy_asdf</author><pubDate>Fri, 22 Apr 2016 16:30:18 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=1975
思路：可以用A*做，但是要手写堆或者用pb_ds的堆，不然会被卡空间
（原题256M，bzoj64M...）
设出发点为S，结束点为T，边权为val(e)，边的出发点为head(e)，到达点为tai(e)

也可以用论文方法，参见俞鼎力的《堆的可持久化和k短路》论文
首先我]]></description><category></category></item><item><title><![CDATA[bzoj1598: [Usaco2008 Mar]牛跑步]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51220657</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51220657</guid><author>thy_asdf</author><pubDate>Fri, 22 Apr 2016 15:51:48 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=1598
思路：裸的k短路，直接用A*+堆即可
A*就是引入一个估价函数h(x)=f(x)+g(x)
优先选择估价小的去搜索

f(x)就是当前到的x已花费代价
g(x)就是估计x到终点还要多少代价
这里f(x)就是出发点S到x的距离
g(x)就是x到终止点T的距离
g(x)可]]></description><category></category></item><item><title><![CDATA[bzoj2809: [Apio2012]dispatching]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51220457</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51220457</guid><author>thy_asdf</author><pubDate>Fri, 22 Apr 2016 15:32:30 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=2809
思路：很明显忍者之间的关系是一个树形结构

先自底向上枚举管理者x，那么根据题意，我们就要从x的子树中选择尽量多的忍者，且工资总和不超过m
用一个可并堆
到一个点x，就把它的儿子节点的可并堆并起来
显然优先选工资低的，那么维护大根堆，不停地删堆顶，直到工资满足预算即可
#]]></description><category></category></item><item><title><![CDATA[bzoj1455: 罗马游戏]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51220347</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51220347</guid><author>thy_asdf</author><pubDate>Fri, 22 Apr 2016 15:13:35 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=1455
思路：左偏树练习题
用并查集维护连通，然后开个数组记录每个人是否已被杀死，用可并堆支持合并和求最小值

左偏树是一种支持合并的堆，写起来比手写堆还要短...
只有一个操作，merge(a,b)，就是把a，b合并...
具体构建参见论文：http://wenku.baidu.]]></description><category></category></item><item><title><![CDATA[bzoj4540: [Hnoi2016]序列]]></title><link>https://blog.youkuaiyun.com/thy_asdf/article/details/51203510</link><guid>https://blog.youkuaiyun.com/thy_asdf/article/details/51203510</guid><author>thy_asdf</author><pubDate>Wed, 20 Apr 2016 20:17:33 +0800</pubDate><description><![CDATA[传送门：http://www.lydsy.com/JudgeOnline/problem.php?id=4540
思路：又是莫队....
我们发现左右端点移动时，只会增加或删除某个点开头或结尾的区间
先考虑右端点从r移动到r+1
令p为[l,r]中最小值的位置
那么它会对新加的区间中的p-l+1个区间产生a[p]的贡献
另一些左端点在[p+1,r]，右端点是r+1的区间怎么统计呢？
]]></description><category></category></item></channel></rss>