<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Devil_Gary的博客]]></title><description><![CDATA[Devil_Gary]]></description><link>https://blog.youkuaiyun.com/Devil_Gary</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Devil_Gary]]></copyright><item><title><![CDATA[搬家啦~~]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/80009920</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/80009920</guid><author>Devil_Gary</author><pubDate>Thu, 19 Apr 2018 19:52:02 +0800</pubDate><description><![CDATA[新博客地址:http://www.cnblogs.com/devil-gary/]]></description><category></category></item><item><title><![CDATA[BZOJ5217: [Lydsy2017省队十连测]航海舰队]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/79751849</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/79751849</guid><author>Devil_Gary</author><pubDate>Fri, 30 Mar 2018 08:25:20 +0800</pubDate><description><![CDATA[被FFT的空间卡了半天 后来发现根本不用开那么大…

首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0  将大矩形也连成串S 其中礁石为1其他为0 
两个串匹配起来如果某一位两个串是1和1 则礁石与舰艇会在同一位置不可能到达 那么这个匹配所对应的图中的位置就不成立

因为要确定每个位置可以想到将T翻转后做FFT后每一位(每一位代表了一个小矩形的匹配情况...]]></description><category></category></item><item><title><![CDATA[BZOJ3473 字符串 广义后缀自动机]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/79282072</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/79282072</guid><author>Devil_Gary</author><pubDate>Wed, 07 Feb 2018 17:01:57 +0800</pubDate><description><![CDATA[今天主攻了下SAM 好多东西以前都没理解到 
对于这道题 我们建一个自动机存所有串 每个穿last从1开始 
对于自动机上每个点额外记一个cnt 表示能匹配到这个点的不同串个数 
建完对每个串在自动机上匹配 把到的每个点x和par[x],par[par[x]]…的cnt++  
然后就从父亲往儿子传递一下 这样每个点i就存了所有&#x2264;" role="presentation" style]]></description><category></category></item><item><title><![CDATA[BZOJ2716 KD-Tree]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/79266953</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/79266953</guid><author>Devil_Gary</author><pubDate>Tue, 06 Feb 2018 09:17:09 +0800</pubDate><description><![CDATA[好久没写博客了 回去赶了好久文化课 颓欲见长 
突然翻到fc爷的KD-Tree板子 来切了到裸题 
对于一开始的数据我们可以先预处理 具体的排序方式见板子 其实就是我们对每次选定的一块选一个维度来排序啦 这里算了下方差 选最大的那一维来分下去 

#include
#define bug(x) cout
#define ll long long
/*
char *TT,*mo,but[(115)+]]></description><category></category></item><item><title><![CDATA[BZOJ5137[Usaco2017 Dec]Standing Out from the Herd]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/79047034</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/79047034</guid><author>Devil_Gary</author><pubDate>Fri, 12 Jan 2018 18:18:40 +0800</pubDate><description><![CDATA[看了半天题 不知道怎么用SAM维护 于是借（chao）鉴（xi）的一发神犇的 只要判断这个子串之前被标记的记号（也就是他属于第几个串）和这次转移到的是否相同 如果不同就说明该子串属于多个串 直接标记-1 依次转移就好咧 最后统计就是ans[f[i]]+=sam[i].mx−sam[par[i]].mx;f[i]ans[f[i]]+=sam[i].mx-sam[par[i]].mx;  f[i]就是]]></description><category></category></item><item><title><![CDATA[非旋Treap 学习笔记]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/79024454</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/79024454</guid><author>Devil_Gary</author><pubDate>Wed, 10 Jan 2018 15:32:16 +0800</pubDate><description><![CDATA[今天学习了一下非旋TreapTreap 听说效率很高而且可持久化(一脸懵逼QAQQAQ)  非旋Treap主要是两个操作splitsplit和mergemerge 下面简单描述一下(得先会TreapTreap啊 ) 
valval:点的值 keykey:randrand的值 
splitsplit : 就是我们把原TreapTreap拆成两个TreapTreap x,y x,y   比如以valu]]></description><category></category></item><item><title><![CDATA[BZOJ3598[Scoi2014]方伯伯的商场之旅  数位DP]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78990023</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78990023</guid><author>Devil_Gary</author><pubDate>Sat, 06 Jan 2018 16:57:12 +0800</pubDate><description><![CDATA[看到数据范围很容易想到数位DPDP  然后就很容易想到枚举每一位作为最优点  
我们可以发现对于一个数字 如果他的最优点确定了 那离最优点 花费越高  
我们可以先将所有的数字全合并到第一个点(用数位DP求) 然后依次枚举从i−>i+1i->i+1 更优的数字有多少个 在这里 我们只需要求出他对答案的贡献即可 从i−>i+1i->i+1  前ii位都要多走一次（加上） 后面都要少走一次（减去） 我]]></description><category></category></item><item><title><![CDATA[BZOJ1025 [SCOI2009]游戏 DP]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78962198</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78962198</guid><author>Devil_Gary</author><pubDate>Wed, 03 Jan 2018 15:58:04 +0800</pubDate><description><![CDATA[题意可以理解为给定N 将其拆为pα11∗pα22∗pα33⋅⋅⋅pαmmp_1^{α_1}*p_2^{α_2}*p_3^{α_3}···p_m^{α_m}的形式 其中pp为素数且 ∑pαii≤n\sum p_i^{α_i}\leq n 
求lcm(pα11∗pα22∗pα33⋅⋅⋅pαmm)的不同个数lcm(p_1^{α_1}*p_2^{α_2}*p_3^{α_3}···p_m^{α_m})的不同个]]></description><category></category></item><item><title><![CDATA[BZOJ4566 [Haoi2016]找相同字符 SAM+拓扑]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78896393</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78896393</guid><author>Devil_Gary</author><pubDate>Mon, 25 Dec 2017 20:17:50 +0800</pubDate><description><![CDATA[学了几天SAMSAM学了 这道题总算是领会到了些许 对parentparent树有了更深的理解 但是我还是不能表述出来 太菜了大家可以去百度CLJ神犇的PPT 讲的很好 附一个百度文库的网址我们可以先跑出两个串的SAMSAM 对于每一个节点 记录到达此节点的串的数目 这时候要用到拓扑 因为对于一个节点ii 如果有两个串能在i匹配 则他一定能下parent[i]parent[i] 匹配 所以到拓扑将每]]></description><category></category></item><item><title><![CDATA[BZOJ1823: [JSOI2010]满汉全席 2-sat]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78876499</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78876499</guid><author>Devil_Gary</author><pubDate>Fri, 22 Dec 2017 20:20:40 +0800</pubDate><description><![CDATA[裸的2-sat  选（hi,mj）（hi,mj）的话就连(i′,j)(j′,i)(i',j )( j',i) 特别的（hi,mi）（hi,mi）不用连 最近集训被吊打啊 好蒻 打算扎实学习一阵 总觉得在知识和实践之间有着一道无法跨越的鸿沟#include<bits/stdc++.h>
#define bug(x) cout<<(#x)<<" "<<(x)<<endl
#define cl(x) me]]></description><category></category></item><item><title><![CDATA[BZOJ3505 [Cqoi2014]数三角形 数学]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78792954</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78792954</guid><author>Devil_Gary</author><pubDate>Wed, 13 Dec 2017 16:01:20 +0800</pubDate><description><![CDATA[总数是ans=C3n∗m−m∗C3n−n∗C3m−斜着的总数ans=C_{n*m}^3-m*C_n^3-n*C_m^3-斜着的总数 
斜着的可以用gcd枚举 对于一个长i宽j的矩形 计算出他的对角线 有s个整数点 则该对角线的贡献是s-2 再计算出只总有多少的这么大的矩形 求和就好啦#define bug(x) cout<<(#x)<<" "<<(x)<<endl
#define ll long l]]></description><category></category></item><item><title><![CDATA[BZOJ2820 YY的GCD 莫比乌斯反演]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78792149</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78792149</guid><author>Devil_Gary</author><pubDate>Wed, 13 Dec 2017 15:08:04 +0800</pubDate><description><![CDATA[∑isprime(p)∑na=1∑mb=1gcd(a,b)==p∑isprime(p)∑_{a=1}^n∑_{b=1}^mgcd(a,b)==p 
∑isprime(p)∑⌊np⌋a=1∑⌊mp⌋b=1gcd(a,b)==1∑isprime(p)\sum_{a=1}^{⌊\frac n p⌋}∑_{b=1}^{⌊\frac m p⌋}gcd(a,b)==1 
∑isprime(p)∑⌊np⌋a=1∑]]></description><category></category></item><item><title><![CDATA[BZOJ3237: [Ahoi2013]连通图  cdq分治+并查集]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78728812</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78728812</guid><author>Devil_Gary</author><pubDate>Wed, 06 Dec 2017 11:27:59 +0800</pubDate><description><![CDATA[首先连通图问题 用并查集维护很显然  
看到k的范围 铁铁的nlognnlogn 因为是离线询问 我们很容易就能想到用cdq分治来维护并查集  
对于两个集合s1,s2s1,s2 我们可以把不属于s1,s2s1,s2的边都先存到并查集里 将s1s1中不属于s2s2的边加进去 这时候就可以判断s2s2这个集合是否满足了 之后我们将之前加进去的边删掉 再加入s2s2中不属于s1s1的就又可以做s1s1啦]]></description><category></category></item><item><title><![CDATA[BZOJ1978 [BeiJing2010]取数游戏  建图+拓扑序]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78723242</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78723242</guid><author>Devil_Gary</author><pubDate>Tue, 05 Dec 2017 18:07:37 +0800</pubDate><description><![CDATA[很容易想到在可以满足L≤gcd(i,j)L\leq gcd(i,j)的i,ji,j之间连边 但是暴力n2n^2枚举肯定过不了啦 考虑枚举每一个大于L的公因数 我们对于每个数根号n枚举他的因子 对每一个因子建一个vectorvector来存 然后每一个vectorvector里的i和i+1连边 yy一下 这样连就保证了L≤gcd(i,j)L\leq gcd(i,j)的点(i,j)(i,j)可以到达通过]]></description><category></category></item><item><title><![CDATA[BZOJ2750[HAOI2012]Road 最短路]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78716915</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78716915</guid><author>Devil_Gary</author><pubDate>Tue, 05 Dec 2017 10:26:35 +0800</pubDate><description><![CDATA[想了半天只知道对于每个边求起点到他的方案数*他到终点的方案数  不知道怎么枚举起点终点 搜了搜题解 涨了些姿势 原来Dij可以在求出单元最短路的同时将每个点到源点的距离排序 这样的话我们就可以枚举起点 按照Dij得到的距离顺序进行转移 具体的看代码吧 有点困 写不动了 代码来自Bloodline#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=]]></description><category></category></item><item><title><![CDATA[BZOJ3944 Sum  杜教筛]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78696744</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78696744</guid><author>Devil_Gary</author><pubDate>Sat, 02 Dec 2017 16:40:48 +0800</pubDate><description><![CDATA[看完题一副不可做的样子 默默点开了题解 发现是杜教筛 就花了半天学习了一下 先说下杜教筛 可以在优于线性的复杂度内求出积性函数的前缀和 
下求∑ni=1f(i)\sum_{i=1}^nf(i) 
令F(i)=∑ni=1f(i)F(i)=\sum_{i=1}^nf(i)我们可以再引入一个积性函数g(i)g(i)  
则∑ni=1f(i)∗g(i)=∑ni=1∑d|if(d)∗g(id)=∑ni=1∑⌊]]></description><category></category></item><item><title><![CDATA[BZOJ3190[JLOI2013]赛车 半平面交]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78672278</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78672278</guid><author>Devil_Gary</author><pubDate>Thu, 30 Nov 2017 09:31:12 +0800</pubDate><description><![CDATA[看了黄学长的 每辆车可以表示成一个一次函数y=kx+by=kx+b, 按kk为第一关键字，bb为第二关键字排序，然后维护一个单调栈就好了，具体的judgejudge函数看代码#include<bits/stdc++.h>
#define bug(x) cout<<(#x)<<" "<<(x)<<endl
#define ll long long
#define eps 1e-7
using name]]></description><category></category></item><item><title><![CDATA[BZOJ5100[POI2018]Plan metra  构造]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78662945</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78662945</guid><author>Devil_Gary</author><pubDate>Wed, 29 Nov 2017 11:00:32 +0800</pubDate><description><![CDATA[首先可以发现在11到nn的链上的点的d1+d2d1+d2是最小的 这样我们可以求出11到nn的链  
对于其他的点 他一定与这条链的上点链接 可以发现 对于点ii 和11到nn上的点j 有d1[i]−d2[i]=d1[j]−d2[j]d1[i]-d2[i]=d1[j]-d2[j] 因此可以求出每个点连向谁 如果没有11到nn上符合差值相等的点 就不存在解我一开始用map+sort 无线TLE+RE#]]></description><category></category></item><item><title><![CDATA[BZOJ1880[Sdoi2009]Elaxia的路线  spfa+拓扑序]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78652298</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78652298</guid><author>Devil_Gary</author><pubDate>Tue, 28 Nov 2017 10:26:10 +0800</pubDate><description><![CDATA[首先我们求出来每一个点到x1,x2,y1,y1x1,x2,y1,y1的最短路  
令s1,s2s1,s2分别为两个人的最短路 
枚举每条边如果dis[x1][u]+dis[y1][v]+e[i].c=s1,dis[x2][u]+dis[y2][v]+e[i].c=s2dis[x1][u]+dis[y1][v]+e[i].c=s1,dis[x2][u]+dis[y2][v]+e[i].c=s2  则在]]></description><category></category></item><item><title><![CDATA[BZOJ1924 tarjan+拓扑序]]></title><link>https://blog.youkuaiyun.com/Devil_Gary/article/details/78651497</link><guid>https://blog.youkuaiyun.com/Devil_Gary/article/details/78651497</guid><author>Devil_Gary</author><pubDate>Tue, 28 Nov 2017 09:24:15 +0800</pubDate><description><![CDATA[先按题目要求连边 缩点之后建反向图按拓扑序转移 
sum[u]=max{sum[v]+sz[u]};sum[u]=max\{sum[v]+sz[u]\}; 
ans=max{sum[i]}(i∈[1,n]);ans=max\{sum[i]\} (i∈[1,n]);#include<bits/stdc++.h>
#define bug(x) cout<<(#x)<<" "<<(x)<<endl
#de]]></description><category></category></item></channel></rss>