<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u011528035</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u011528035]]></copyright><item><title><![CDATA[hdu 6710  2019 CCPC 网络赛 09题]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/100050290</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/100050290</guid><author>u011528035</author><pubDate>Sat, 24 Aug 2019 11:12:15 +0800</pubDate><description><![CDATA[题意：就是给你一个二分图，左右两边两点之间存在边的概率是0.5，问两点的期望距离是多少？

思路：组合数学和dp。



设dp[i][j][k][l]

第一个状态是当前的步长

第二个状态是左边还有多少个点没链接

第三个状态是右边还有多少个点没链接

第四个状态是当前可用来链接下一批的点是多少个



举一个转移的例子，当我们从第一个点出发可以链接到右边的m个点（不包含终点），则第二个状...]]></description><category></category></item><item><title><![CDATA[CodeForces - 1182D]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/93216099</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/93216099</guid><author>u011528035</author><pubDate>Fri, 21 Jun 2019 18:52:08 +0800</pubDate><description><![CDATA[题意：找到一个点作根，使同一深度的点有相同数目的边。



思路：经过简单的观察，实际上这样的树有一个特征：当某一个点作根符合题目要求时，每个相同深度的节点其子树的节点数目是相同的，或者是每个相同深度的节点作根，其子树结构相同。

那么答案只有两种情况，一种是叶子，一种是某个点（唯一一个），其每一个所连接的子树的节点数目相等。

因此面对判断一个点是否是答案的难题，可以比较每个节点作根时其子树节...]]></description><category></category></item><item><title><![CDATA[CodeForces - 809C]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/88866415</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/88866415</guid><author>u011528035</author><pubDate>Thu, 28 Mar 2019 12:29:44 +0800</pubDate><description><![CDATA[思路：从起始点开始，每隔（2^n）*（2^n）（n为任意正整数）矩阵之间，不同矩阵中数的和之差为n*n*n，而连续个x个（2^n）*m矩阵之和为(1+x*2^n)*x*2^n/2，因此我们可以快速统计连续2^n区间和，对k进行切割即可。


#include &lt;bits/stdc++.h&gt;
using namespace std;

#define MOD 1000000007
#de...]]></description><category></category></item><item><title><![CDATA[CodeForces - 1117G]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/87888966</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/87888966</guid><author>u011528035</author><pubDate>Sat, 23 Feb 2019 10:15:38 +0800</pubDate><description><![CDATA[思路：如果我们只考虑一个点在一个区间内所提供的贡献，那么只要需要知道左第一个比他大的数离他的距离和右边第一个数比他的距离即可。而两边处理步骤是一样的，因此，可以先算完左边，在算右边。首先先对询问离散化处理，然后使用单调队列预处理出每个点最左或最右的位置，然后使用两个树状数组储存，并计算答案。


#include &amp;lt;bits/stdc++.h&amp;gt;
using namespace std;...]]></description><category></category></item><item><title><![CDATA[CodeForces - 1101G]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/86636796</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/86636796</guid><author>u011528035</author><pubDate>Fri, 25 Jan 2019 10:14:28 +0800</pubDate><description><![CDATA[题意：洛谷有中文题意，链接:https://www.luogu.org/problemnew/show/CF1101G

思路：其实考虑到子集之间异或最多能够产生的数的数目其实是2^32，而且就是只需要32个数就可以了，所以答案小于32。而转换为二进制以后长度也就32。将其转换位多元一次方程组之后，发现如果子集之间是线性无关的话，必然是满足要求，而矩阵不管怎么变换，秩是不会变的，而且秩也小于32，...]]></description><category></category></item><item><title><![CDATA[CodeForces - 1101F]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/86636505</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/86636505</guid><author>u011528035</author><pubDate>Fri, 25 Jan 2019 09:54:16 +0800</pubDate><description><![CDATA[题意：洛谷有中文题意，链接:https://www.luogu.org/problemnew/show/CF1101F

思路：只考虑一辆车，我们可以很简单的使用二分操作对V进行二分找到答案，运行的时间是可以接受的。因为目前车的数目太多了，我们无法直接进行二分操作，所以我们考虑使用的是一辆车一辆车的V，一步一步地提升V。但是考虑到极端地情况下，复杂度依然很高。其实我们发现其实最终的V只取决于其中一...]]></description><category></category></item><item><title><![CDATA[CodeForces - 1065F]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/83211371</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/83211371</guid><author>u011528035</author><pubDate>Sat, 20 Oct 2018 10:52:24 +0800</pubDate><description><![CDATA[题目：就是问一次牌子最多能遍历多少个不同的叶子节点。

思路：假如牌子会落在当前位置的某颗子树上的一个叶子，那么就需要先统计好其他子树上可以到达并且返回的叶子节点数，然后枚举完所有叶子的可能即可。

（如果牌子在两个叶子能上升到达同一个节点，那么他们最高到达的节点是一样的）


#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;...]]></description><category></category></item><item><title><![CDATA[CodeForces - 1009F]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/81606301</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/81606301</guid><author>u011528035</author><pubDate>Sun, 12 Aug 2018 14:37:30 +0800</pubDate><description><![CDATA[思路：对于每个节点，只要统计得出当前深度最小数量最多的深度。暴力的写法就是每次对于这个子树全部搜索。但实际上可以使用启发式合并，每次合并的时候加上小树的深度，顺便判断一下是否答案更新。


#include &lt;bits/stdc++.h&gt;
using namespace std;

#define MAX 1000010

int n;
vector&lt;int&gt; e[MAX]...]]></description><category></category></item><item><title><![CDATA[CodeForces - 675E]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/77893696</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/77893696</guid><author>u011528035</author><pubDate>Fri, 08 Sep 2017 13:41:00 +0800</pubDate><description><![CDATA[题意：一开始 你在第一个站 现在告诉每个站可以买一张票去其他地方（只能去比他坐标大的） 最后一个站没有卖


n表示 有n张车站


于是有n-1张车票


车票ai 表示这张车票可以从 i 车站出发 去 i+1 车站到 ai车站的任意一个车站 


现在 假设 pij 表示从i 到 j 的车站 最小用票数量


求所有的pij的和


思路：


假设我]]></description><category></category></item><item><title><![CDATA[codeforces 813e 莫队算法]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/73938620</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/73938620</guid><author>u011528035</author><pubDate>Fri, 30 Jun 2017 10:29:26 +0800</pubDate><description><![CDATA[题意：给你一个区间 问你有总共多少个元素 ？ 但是有一个条件 就是如果这个元素超过k个 当k个来算


思路：由于题目限制，所以只能是在线算法。如果知道一个区间，往左端加入一个点，只要知道这个的往右数第k个和它相同的数是否在这个区间么就可以了，右端同理。然后计算了一下复杂度和条件，发现可以使用莫队算法。


ps：其实可以使用在线的主席树，当时没想到，而且由于只记得莫队算法的思想，所以]]></description><category></category></item><item><title><![CDATA[codeforces 811C Vladik and Memorable Trip]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/72785388</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/72785388</guid><author>u011528035</author><pubDate>Sat, 27 May 2017 22:47:15 +0800</pubDate><description><![CDATA[题意：选择n个区间内所有的元素不能在外部出现，求所有各区间内的集合元素异或和？


思路：先预处理可行的区间，然后扫一波即可。


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define LL long long
const]]></description><category></category></item><item><title><![CDATA[codeforces 556D Case of Fugitive]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/72729462</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/72729462</guid><author>u011528035</author><pubDate>Thu, 25 May 2017 15:11:43 +0800</pubDate><description><![CDATA[题意：一条线上有个n个大陆，范围给定且不相交，现在要邻近的大陆搭n-1座桥（桥的两段要在大陆上），给你m座桥的长度，问你怎么分配？


思路：其实就是n-1个区间和m个数，从m个数里面挑n-1个数一一对应区间，这个要求不小于左区间，不大于右区间。


先对区间的左区间排序，从假设从1开始走，如果遇到左区间就塞入区间，如果遇到超出区间范围就剔除（就是没有匹配到，输出no了），但是如果遇到]]></description><category></category></item><item><title><![CDATA[codeforces 803G Periodic RMQ Problem]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/72726894</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/72726894</guid><author>u011528035</author><pubDate>Thu, 25 May 2017 14:57:20 +0800</pubDate><description><![CDATA[题意：放大版的区间更新的线段树


题解：由于实际上操作并不会生成太多节点，而且只有更新才会生成新节点，如果查询的时候发现下面并没有节点，就知道下面没有更新而且原来数组是循环的，所以直接得到答案，如果更新过就会有节点生成，就如同原来一样计算就行，更新操作就像如同原来的线段树一样，只是如果当前节点不存在就给他生成一个。


ps：看到有人是用离线算法写的，有兴趣的同学可以去学习下姿势。]]></description><category></category></item><item><title><![CDATA[codeforces 786c Till I Collapse]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/70941621</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/70941621</guid><author>u011528035</author><pubDate>Thu, 25 May 2017 14:41:52 +0800</pubDate><description><![CDATA[题目:将这个数列分割成m段，每一段里面数的种类不超过k，现在询问当 k在[1,n]之间时，对应的m去最小，分别是多少？


思路：首先计算所有的集合数量到底有多少 n+n/2+n/3+n/4+n/5.....大约是]]></description><category></category></item><item><title><![CDATA[codeforces 757e Bash Plays with Functions]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/54952669</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/54952669</guid><author>u011528035</author><pubDate>Thu, 09 Feb 2017 19:09:53 +0800</pubDate><description><![CDATA[题意：
给你两个数 n和r 


可以做r次分解
当r大于0 n可以分解成两个因子u和v   u*v=n  
当r 等于0 n分解出的两个因子的gcd要为1


如题意所给的公式来计算最终结果


思路：
仔细观察 在 r相同的情况下 25 和 4  30和42  的答案是相同
是由于 他们的构成结构相同  
即n=(a^x）*(b^y)*(c^z) ...]]></description><category></category></item><item><title><![CDATA[codeforces 722C Destroying Array]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/52723289</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/52723289</guid><author>u011528035</author><pubDate>Sun, 02 Oct 2016 11:51:35 +0800</pubDate><description><![CDATA[codeforces 722C]]></description><category></category></item><item><title><![CDATA[codeforces 722D. Generating Sets]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/52721790</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/52721790</guid><author>u011528035</author><pubDate>Sun, 02 Oct 2016 02:01:59 +0800</pubDate><description><![CDATA[题意：X集合的数 可以有两种方式变换Y  现在给你一个集合Y   求X 且这个X的里最大的数 尽可能小 （由于是集合 所以集合里的元素相同）


思路：贪心
假设现在是 a>d>b>c  
但是a和d有可能变到c
由于我们是要把最大的数变的尽可能小  
所以对于任意情况下  必然是变化a比较合适   但如果a都变不了其实就代表结束了
#include 
#include 
#inc]]></description><category></category></item><item><title><![CDATA[codeforces 713C]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/52703082</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/52703082</guid><author>u011528035</author><pubDate>Thu, 29 Sep 2016 16:42:52 +0800</pubDate><description><![CDATA[题意：就是把一个数列变成严格递增的数列 求最小花费


思路：直接考虑结果的整个数列   必然存在那么几个数  他是从始至终 都没有变过  那么假设有一些数会受到这个数影响 比如一个数ai不变 如果aj 是受ai影响 那么就会消耗  
abs(ai-i-aj+j) 那么我把每一个ai-i设为一个基准线 那么dp[ai-i]就是当前基准线花费最小的情况  既可获得答案 


#incl]]></description><category></category></item><item><title><![CDATA[codeforces 717E - Paint it really, really dark gray]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/52550439</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/52550439</guid><author>u011528035</author><pubDate>Thu, 15 Sep 2016 18:17:40 +0800</pubDate><description><![CDATA[题意：给你一颗树 每个节点有黑色 或者 粉色 现在从第一个节点出发 每次经过一个节点 就把他颜色变成另一种颜色 求问全部颜色变成黑色的路径 spj


思路：每个点最好只处理一次这样既方便又快捷  而如果最下面的叶子节点 是粉色 肯定要过去的  到达底部要 回溯回去   同理先处理好他的所有子树 
如果是粉树 那么直接回去涂起来
如果是黑树（如果根节点就直接结束了） 那么最后自己由于不知]]></description><category></category></item><item><title><![CDATA[codeforces 712d]]></title><link>https://blog.youkuaiyun.com/u011528035/article/details/52505379</link><guid>https://blog.youkuaiyun.com/u011528035/article/details/52505379</guid><author>u011528035</author><pubDate>Sun, 11 Sep 2016 19:03:37 +0800</pubDate><description><![CDATA[题意：就是a，b玩游戏，a的起始分数为a，b的起始分数为b，每一轮两个都随机加 [-k k]的一个数 问你a比b的结果有几种


思路：因为两个人不互相干扰  看了一下数据范围  直接记下了每一轮的状态 即dp[i][j]表示第i轮有j分数有多少  最后比较一下  
ps：虽然很容易想  但是太暴力了 一点都不优雅   后来发现有很简单的快的方法


#include 
#inclu]]></description><category></category></item></channel></rss>