<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[萌萌哒的Leo]]></title><description><![CDATA[树在，山在，大地在，岁月在，OI在，我还要怎样更好的世界。]]></description><link>https://blog.youkuaiyun.com/Leo_Riddle</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Leo_Riddle]]></copyright><item><title><![CDATA[codeforces 346C Number Transformation II]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/103100777</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/103100777</guid><author>Leo_Riddle</author><pubDate>Sat, 16 Nov 2019 17:53:04 +0800</pubDate><description><![CDATA[传送门

题意：

给两个数字a,b，有两个操作，第一个操作直接-1，第二个操作是，求a变成b的最少操作数

题解：

很明显令表示由b+k到b的最少操作数，假设b,b+k可以一步操作到达，



由此得出单调上升，即可贪心每次减去最大值

注意：到会有重复，需要用到函数

去重后的数字

当然也有别的思路：考虑到这是第一步可达区间，再从这里可以依次扩展到其他步的可达区间,有机会再写吧

代码：
...]]></description><category></category></item><item><title><![CDATA[codeforces 549C Happy Line]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/103098494</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/103098494</guid><author>Leo_Riddle</author><pubDate>Sat, 16 Nov 2019 17:13:04 +0800</pubDate><description><![CDATA[传送门

题意：

一行数字可以前后交换，交换后，之前在前面的数字+1，之前在后面的数字-1，问是否可以将这一行数字通过交换使得得到一行单调上升的数字

题解：

可以发现交换前后数字都只改变1



不妨将数字的下标考虑进来，先不考虑1，直接交换

，可以发现我们交换后再减去下标就是上面的式子

所以原来的1就可以等价为直接交换

考虑到这样一个事实我们先给再排序后由于整体单增再减，也是单增的，...]]></description><category></category></item><item><title><![CDATA[codeforces 1256E Yet Another Division Into Teams]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/103098198</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/103098198</guid><author>Leo_Riddle</author><pubDate>Sat, 16 Nov 2019 14:33:14 +0800</pubDate><description><![CDATA[传送门

题意：

n个数字，分成若干队伍（每个队伍至少3个数字），每个队伍都有最大最小值的差值，如何才能使所有队伍的最大最小差值之和最小。

题解：

容易有结论：人数 6，一定没有，人数6优

下证：不妨设 

 则任取 

 有 

所以我们可以通过将所有队员划分为3、4、5人数的队伍，贪心得按照大小顺序选择队员一定优，然后通过dp划分即可得到最优解
...]]></description><category></category></item><item><title><![CDATA[bzoj P4870 [Shoi2017]组合数问题]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408957</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408957</guid><author>Leo_Riddle</author><pubDate>Mon, 31 Jul 2017 01:31:02 +0800</pubDate><description><![CDATA[传送门
炒鸡强的dp啊，原来组合题还可以这么做，用组合的意义来dp，只做过用组合优化dp。
我们考虑一下那个式子的意义:
nk个东西中取r个的方案数+nk个东西取k+r个的方案数+nk个东西取2k+r个的方案数+...
然后进一步转化问题：从nk个物品里选取膜k余r个物品的方案数。
那么怎么求这个问题呢?
很容易能想到一个简单的dp，设f[i][j]表示前i个物品取了膜k余j的方案数，]]></description><category></category></item><item><title><![CDATA[bzoj P4034 [HAOI2015]树上操作]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408942</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408942</guid><author>Leo_Riddle</author><pubDate>Mon, 31 Jul 2017 01:07:01 +0800</pubDate><description><![CDATA[传送门

这道题树剖也蛮裸的，观察一下下标数组我们发现每一棵子树在线段树的下标肯定是连续的，想想dfs的过程就知道了，然后我们就能用树剖维护子树了。通过这题我们也知道了树剖不仅能维护链，也能维护子树。
这题也有更高超的方法，用线段树维护dfs序，对于dfs序中出现的节点我们一个取正一个取负，就可以直接上线段树了。
树剖代码：
#include
#include
#include
usin]]></description><category></category></item><item><title><![CDATA[bzoj P3531 [Sdoi2014]旅行]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408903</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408903</guid><author>Leo_Riddle</author><pubDate>Mon, 31 Jul 2017 00:56:50 +0800</pubDate><description><![CDATA[传送门

这道题学到了动态开空间线段树的写法，感觉跟主席树有一定的类似。
说一下怎么动态开吧。
首先回忆一下线段树的过程，我们发现对于这题，每一颗线段树都有很多的子结点是0，也就是说这些节点都是没用的，所以我们考虑对于每一个非0叶子结点到根都是非0的，但是其他都是为0的，都是没有用的，那么为何要为它们开内存存储呢，所以我们换种方式存储对每一个节点都有一个编号，然后结构体内的l，r都是存的l]]></description><category></category></item><item><title><![CDATA[bzoj P1072 [SCOI2007]排列perm]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408853</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408853</guid><author>Leo_Riddle</author><pubDate>Mon, 31 Jul 2017 00:37:48 +0800</pubDate><description><![CDATA[传送门
果然一遇到dp就瞬间失去了思考能力。。
整没看出来这是状压dp，思路也很不错。
我们可以发现s长度很短，所以很容易想到状压来枚举，我们枚举一些数字是否使用，用状压记录一下，也就是设f[s][i]表示状态为s的膜d为i的方案数，然后通过枚举下一位转移。
怎么转移呢？
我们枚举了模数所以新添的一位就可以直接加上枚举的模数再膜就是新添一位后的新膜数f[i^(1
注意：我们这里算的是组]]></description><category></category></item><item><title><![CDATA[bzoj P1036 [ZJOI2008]树的统计Count]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408837</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/76408837</guid><author>Leo_Riddle</author><pubDate>Mon, 31 Jul 2017 00:13:49 +0800</pubDate><description><![CDATA[传送门

嗯，一道裸裸的树剖。
代码：
#include
#include
using namespace std;
const int Maxn=30005;
const int oo=2147483647;
struct segment{int v,next;}e[Maxn*2];
struct Qtree{int l,r,mx,sum;}t[Maxn*4];
int size[Max]]></description><category></category></item><item><title><![CDATA[bzoj P2560 串珠子]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75676149</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75676149</guid><author>Leo_Riddle</author><pubDate>Sat, 22 Jul 2017 01:50:33 +0800</pubDate><description><![CDATA[传送门
第一道子集dp。（感觉很像状压dp。。
好弱啊我看了好多大神的博客才勉强看懂
g[s]表示s状态下的所有情况，即s状态下的点两两之间任意连边（包括不连边），f[s]表示s状态下的合法情况（所有点连通）。
那么我们就可以那全集剪去不合法的子集。
全集就是f[i]=f[i]*(a[j][k]+1)

那么怎么求不合法的子集呢？
我们任取一个点（任取二进制中的一个1）来枚举，可以]]></description><category></category></item><item><title><![CDATA[bzoj P1042 [HAOI2008]硬币购物]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75676136</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75676136</guid><author>Leo_Riddle</author><pubDate>Sat, 22 Jul 2017 01:27:50 +0800</pubDate><description><![CDATA[传送门
这道题算我写的第一道容斥原理。
大概了解了容斥原理的思想。
首先这题要求付款方案数，一道计数问题，然后我们就可以用容斥原理玩转的求一些计数问题。我们考虑先dp，设F[i]为不考虑每种硬币的数量限制的情况下，得到面值i的方案数。然后上容斥原理我们可以考虑用不考虑限制的方案数减去超过限制的方案数。再考虑怎么求超过限制的方案数，我们发现由容斥原理有：
任意超过限制=1超过限制+2超过限制]]></description><category></category></item><item><title><![CDATA[bzoj P3195 [Jxoi2012]奇怪的道路]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75676091</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75676091</guid><author>Leo_Riddle</author><pubDate>Sat, 22 Jul 2017 01:09:45 +0800</pubDate><description><![CDATA[传送门
这道题好难啊，不会（这个菜鸡博主什么都不会
这道题就是状压dp啦（跟主旋律那题一样都是图的状压dp都是以点作状态压缩，那到题是枚举图的点的集合（子集dp），这道题是枚举点的奇偶性）
说一下dp方程式，设F[i][j][s][l]表示枚举到第i个点，用了j条边，（由i-k~i的点的出度奇偶性组成的状态）s，与第l条边相连（注意这重状态不能省去，要不然会算重（连边顺序不同也算一种方案））]]></description><category></category></item><item><title><![CDATA[NOI 2018—遥远的梦]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75675576</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75675576</guid><author>Leo_Riddle</author><pubDate>Fri, 21 Jul 2017 22:46:08 +0800</pubDate><description><![CDATA[希望一年后的我不负自己。]]></description><category></category></item><item><title><![CDATA[bzoj P4027 [HEOI2015]兔子与樱花]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75332422</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75332422</guid><author>Leo_Riddle</author><pubDate>Wed, 19 Jul 2017 01:42:14 +0800</pubDate><description><![CDATA[传送门
好吧这题我也没想出来。我果然是个zz。。
很妙的贪心，（其实我也知道贪心，但是姿势不对），我们观察数据n
TIP：遇到树一类的思博题，我们要对子树分析，观察数据范围以及询问的ans的特点（要想到树上dp或贪心或用数据结构·维护dfs序）。贪心也要尝试猜一些结论。
代码：
#include
#include
#include
#include
using namespace std]]></description><category></category></item><item><title><![CDATA[bzoj P4033 [HAOI2015]树上染色]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75332395</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75332395</guid><author>Leo_Riddle</author><pubDate>Wed, 19 Jul 2017 01:22:09 +0800</pubDate><description><![CDATA[传送门

这道题很妙啊。反正我是想不出来。。
首先有一个很容易想到的状态，设f[i][j]表示子树为i，i涂了j个节点的距离和。嗯这个还是能想到的，然后考虑转移，然后就被虐成zz了。。
分析子树i与儿子所连边的贡献，可以发现这条边的贡献等于他左右两边同色点数乘积和（左黑点数*右黑点数+左白点数*右白点数）。于是我们发现可以进行转移了，就是一个树形dp，f[x][j]=max(f[x][j]]]></description><category></category></item><item><title><![CDATA[洛谷 P2178 品酒大会(bzoj P4199 [Noi2015]品酒大会/uoj P131【NOI2015】品酒大会)]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75209907</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75209907</guid><author>Leo_Riddle</author><pubDate>Sun, 16 Jul 2017 20:19:42 +0800</pubDate><description><![CDATA[传送门

这道题一看就是一种非常恶心的感觉，事实的确如此恶心到我饭都吃不下去。。
我恐怕真的不适合这个竞赛。。
这道题我想的是sa+单调栈然后全世界都比我快，全世界都用的是并查集。。
好吧说下zz的做法：首先我们想想求lcp的过程两个后缀的lcp=rmq min height(i,j)，那么我们考虑height[i]并维护一个单调递增栈，如果height[i]i)没有贡献那么就弹出，只要]]></description><category></category></item><item><title><![CDATA[洛谷 P3773 [CTSC2017]吉夫特(bzoj P4903 [CTSC2017]吉夫特/uoj P300【CTSC2017】吉夫特)]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75209111</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75209111</guid><author>Leo_Riddle</author><pubDate>Sun, 16 Jul 2017 19:28:20 +0800</pubDate><description><![CDATA[传送门

昨天写的，额这题应该算ctsc2017最水的了吧，连我都会。
这题一看组合数取模直接上lucas定理啊，知道lucas的应该都A了吧。。还有那个样例提示的太明显了吧。。还有不是很懂网上为什么有人要用exlucas，2难道不是质数？？
然后就是肯定都是组合数膜2都是1，根据lucas定理每一个组合数最后肯定都化成了c（1，1）或c（1，0）或c（0，1）或c（0，0），然后c（1，]]></description><category></category></item><item><title><![CDATA[洛谷 P3723 [AH/HNOI2017]礼物(bzoj P4827 [Hnoi2017]礼物)]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75140215</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75140215</guid><author>Leo_Riddle</author><pubDate>Sat, 15 Jul 2017 00:26:52 +0800</pubDate><description><![CDATA[当初省选时看这题一脸懵逼，打了70分的代码事实满分还是很容易的（啪啪啪，自己wa了十次还说容易？？
好了说下题解吧，这题就是求循环卷积，我的代码是0~n-1，式子是1~n（主要是博主FFT习惯写0~n-1），照样发图片（博主太蠢，不会输数学公式。。）
注意：比较大小时的精度！！！在这里wa了10次！！！
Tips：round()四舍五入函数

代码：
#include
#include]]></description><category></category></item><item><title><![CDATA[洛谷 P3338 [ZJOI2014]力（bzoj P3527 [ZJOI2014]力）]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75116207</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75116207</guid><author>Leo_Riddle</author><pubDate>Fri, 14 Jul 2017 15:43:38 +0800</pubDate><description><![CDATA[传送门

很难受，不会输公式，于是手写了一份，比较丑，希望不要介意。fft的套路果然深。。照着网上模板学习了一下。。

代码：
#include
#include
#include
#include 
using namespace std;
const int Maxn=1000005;
int n,N,L;
int rev[Maxn];
int dig[Maxn];
double p]]></description><category></category></item><item><title><![CDATA[洛谷 P3745  [六省联考2017]期末考试(bzoj P4868 [Shoi2017]期末考试)]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75046238</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75046238</guid><author>Leo_Riddle</author><pubDate>Thu, 13 Jul 2017 10:57:10 +0800</pubDate><description><![CDATA[传送门

很妙啊，一开始只想着贪心。看了题解才知道三分。
因为每个学生都必须知道自己的所有排名，所以只要结束时间固定那么就能o(n)算出所需价值，再看这个函数，老师不满意度是一条单调上升的曲线；学生则是下降；那门合成两条线一定是一条二次函数的并属于0到正无穷的单峰曲线（凸函数），于是三分结束时间就可以了
注意：此题有一个超坑的地方c有可能等于1e16那么肯定不能让学生不满意，所以只要让结束]]></description><category></category></item><item><title><![CDATA[洛谷 P2324 [SCOI2005]骑士精神]]></title><link>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75042579</link><guid>https://blog.youkuaiyun.com/Leo_Riddle/article/details/75042579</guid><author>Leo_Riddle</author><pubDate>Thu, 13 Jul 2017 00:24:00 +0800</pubDate><description><![CDATA[传送门
开始怼网络流24题所以发的比较晚，学习一下A*搜索，A*其实就是加入评估函数对有限步数或能估价有效的剪枝，对于A*一般只有dfs（bfs被成为最愚蠢的A*）。
这题的估价函数：当前棋盘与目标棋盘不同的位置数量-1（评估函数是当前状态到目标状态的距离），所以就有：

当前不相同的骑士个数 + 当前步数 
若不满足就剪枝
代码：
#include
#include
using n]]></description><category></category></item></channel></rss>