<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[shordinger的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/shordinger</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; shordinger]]></copyright><item><title><![CDATA[2020杭电第四场1008]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/119248887</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/119248887</guid><author>shordinger</author><pubDate>Fri, 30 Jul 2021 15:37:58 +0800</pubDate><description><![CDATA[论矿工的自我修养
这道题呢，题意是这样的，给你一个网格图（n*m），这个网格上面有k个地雷。有一个矿工从左上角的（1，1）出发，然后他只能往右或者王下走，不能踩到地雷，请问他能踩到的格子数量有多少个。
题解，我们考虑对于每一列，已经存在的走不到的区间的集合为（（l1,r1）,(l2,r2),(l3,r3)…），保证所有的区间不相交，初始化的时候将第一个区间预处理出来即可。
此时，对于下一列中的每一个点，存在两种情况，一种是（li-1&lt;=deep&lt;=ri+1），一种是在这个外面，因此，我们只要找到]]></description><category></category></item><item><title><![CDATA[牛客多校第四场E.Xor Tree]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/119178240</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/119178240</guid><author>shordinger</author><pubDate>Wed, 28 Jul 2021 14:43:47 +0800</pubDate><description><![CDATA[牛客多校第四场E.Xor Tree
题目链接
题意，给一颗树。

条件一：树上的每个节点都有一个取值范围，记为（l,r）。
条件二：树上的每条边都有一个异或值，表示当边两端的节点在取值范围内取值的时候两个值的异或结果为多少。

求：总共有多少种取值满足条件
题解：

结论一：只要确定了整个树上任意的一个节点，整棵树就确定了。
结论二：假设存在一颗树满足条件二，则当所有的节点异或上某一个值以后仍然满足，理由是x^x=0。
由上述两个结论我们可以将条件二转化为每个点有一个初始值，满足当根节点（可以自定义）为0的]]></description><category></category></item><item><title><![CDATA[Codeforces 1436D Bandit in a City]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/109394404</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/109394404</guid><author>shordinger</author><pubDate>Fri, 30 Oct 2020 22:36:22 +0800</pubDate><description><![CDATA[本题是一个不错的贪心（不愧是c-贪心-f），大致题意就是给一棵树，每个节点都有权值，父节点可以把权值交给子节点，问最后大一条支链上面的权值和最小是多少。题目链接
思路，首先我们可以看到，对于某一个拥有子节点的父节点，与他的子节点们存在这样的关系。即他对于他所有的支链都会贡献最后他留下来的值，但是如果继承给子节点，那么就只会有影响到唯一的一个部分，且最终贡献总和也会变为本身的大小，因此可以很容易的看到，最后所有的值都到子节点上面去了。那就非常简单了，记录一下每一个父节点的子树数量和包括他本身在内的所有后续节点]]></description><category></category></item><item><title><![CDATA[Codeforces 1428E Carrots for Rabbits]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/109372053</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/109372053</guid><author>shordinger</author><pubDate>Thu, 29 Oct 2020 22:14:45 +0800</pubDate><description><![CDATA[今天这题是一个非常不错的思维题，贪心专业户的我表示非常满足。
题目链接：题目
题意：将n个数字拆分成k个，比如5可以拆分为（1+1+2）变成3个。拆完之后求拆出来的所有数字的平方和最小为多少
思路：首先进行一个简单的证明，对于任意一个正整数，将他拆分为小于等于他本身的个数个数字之后的最小平方和必然是尽量平均之后的结果，这个可以用平方平均值很快看出来。那么就可以O(1）算出来他的贡献。其次，我们进行贪心，假设我们已经对将当前的数字拆分为了q个数字，其中第i个数字被分为了Ai个（其中初始状态全部为1）。那么就有]]></description><category></category></item><item><title><![CDATA[Codeforces 训练计划]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/109346344</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/109346344</guid><author>shordinger</author><pubDate>Wed, 28 Oct 2020 22:13:10 +0800</pubDate><description><![CDATA[这篇文章前面先说明一下接下去的一项计划：
出于当前本人代码质量不高导致时常WA多发才过，思维不够敏捷导致水题也不能快速做过，本人需要一些针对性的计划来训练。
1、初始训练题量为100题，要求为codeforce上Div2的C题以上
2、由于A、上下界B、大小于符号C、题目看错，翻译错误D、其他非思维因素的简单错因的WA，都需要假一罚五，一题可以重复。具体多少罚款不随题目难度增加而减少，一律五题。
3、周一至少两题，周二三题，周三一题，周四两题，周五两题，周六五题，周日五题，不包括日常训练与其他比赛的题目，仅]]></description><category></category></item><item><title><![CDATA[Codeforces 1437D Minimal Height Tree]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/109346163</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/109346163</guid><author>shordinger</author><pubDate>Wed, 28 Oct 2020 22:11:34 +0800</pubDate><description><![CDATA[题意：给一个数组，这个数组是一棵树的BFS序列，每个节点的子节点必然从小到大遍历。请构造一棵树满足这个序列并且深度最小，输出深度
思路：
由于每个节点的子节点必然从小到大遍历，因此对于一段严格单增的区间，必然是放在同一个父节点下面最好。那么我们进行贪心，对于根节点，我们往里面放入第一段区间，然后记录其中的节点有多少个记录为p[1],对于接下去的p[1]个区间，我们都可以放在这个区间的下面，然后把这些放进去的所有区间总共有多少个记录为p[2]…以此类推，直到放完为止。最后输出我们的层数即可。
代码：
#inc]]></description><category></category></item><item><title><![CDATA[2020-10-22]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/109230732</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/109230732</guid><author>shordinger</author><pubDate>Thu, 22 Oct 2020 21:11:10 +0800</pubDate><description><![CDATA[今天是回到图论的一天，找了一个最短路径计数的题目，也就是要求找出来最短的路一共有多少条，路会有重边与自环，不过没有权值，因此非常简单。这道题甚至BFS都能跑，，不过复习起见我选择了Dijkstra跑最短路的过程中记录每个点的最短路径与这个最短路径下的路径数量，也就是在dijkstra的堆优化前提下增加一个相等的判断即可
题目链接最短路计数：
代码如下：
#include &lt;bits/stdc++.h&gt;
using namespace std;
typedef long long ll;
cons]]></description><category></category></item><item><title><![CDATA[2020-10-21]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/109211151</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/109211151</guid><author>shordinger</author><pubDate>Wed, 21 Oct 2020 22:10:12 +0800</pubDate><description><![CDATA[今天是满课的一天，于是我找了个水题，单纯的求逆序对！题目求逆序对
本题的标答似乎是在归并排序的过程中记录交换的次数，不过我灵机一动就拿离散化加上求逆序对的操作求证了一遍，发现也非常能用，而且也是O(nlogn）的复杂度，完全能冲。
代码如下
#include &lt;bits/stdc++.h&gt;
using namespace std;
typedef long long ll;
typedef pair&lt;ll, ll&gt; P;
const int maxn = 5e5 + 5;
ll c[]]></description><category></category></item><item><title><![CDATA[2020-10-20]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/109186597</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/109186597</guid><author>shordinger</author><pubDate>Tue, 20 Oct 2020 18:39:23 +0800</pubDate><description><![CDATA[今天这道题，是凸包的模板题，求的就是凸包的周长。先给出题目链接牛圈，
凸包的计算方式其实是十分简单的，首先先把整张图上面最下面的那个点取出来作为起点，易证这个点必然存在于凸包上面。然后对剩下的所有点进行极角排序，就能得到有序的点坐标数组，按照顺时针从小到大排序，接下来的事情是开始扫描遍历这些点。扫描的时候每次都把一个点加入进去，并且与前面的所有已经加入的点进行比较，如果有点的角度小于当前加入的点相对于当前比较的点的角度，那么就退化更新那个点，利用双指针就可以维护。
附上代码：
#include &lt;bi]]></description><category></category></item><item><title><![CDATA[2020-10-19]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/109167019</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/109167019</guid><author>shordinger</author><pubDate>Mon, 19 Oct 2020 19:47:23 +0800</pubDate><description><![CDATA[今天计算几何冲锋的第一天，选择了一道看上去颇有难度的扫描线题目。说实在的，这道题我打一开始抱着看题解的心去做的，想不到居然过了。废话不多说，咱们上题（三角形）。

题目描述
给出平面上的n个等腰直角三角形。每个三角形用3个整数描述x, y, m（m&gt;0）。一个三角形的3个顶点分别是(x, y)，(x+m, y)and(x, y+m)。你的任务是计算这些三角形覆盖的总面积。
输入格式
输入第一行是整数n（n≤2000）。
接下来n行每行描述一个三角形，包括3个整数xi，yi，mi(1≤i≤n，-10^7]]></description><category></category></item><item><title><![CDATA[ZJUT-DAY4 图上涂色问题]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/108933205</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/108933205</guid><author>shordinger</author><pubDate>Mon, 05 Oct 2020 21:30:27 +0800</pubDate><description><![CDATA[本题为图上DFS+贪心+各种奇妙的优化，差点没把我卡死
#include &lt;bits/stdc++.h&gt;
using namespace std;
const int maxn = 1e4 + 10;
vector&lt;int&gt; p[maxn];
int k;
int ans[maxn];
int vis[maxn];
int q[maxn];
int use[maxn];
int ptr[maxn];
int main()
{
    int n, m, a, b, r;
    in]]></description><category></category></item><item><title><![CDATA[2020-10-04]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/108921353</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/108921353</guid><author>shordinger</author><pubDate>Sun, 04 Oct 2020 19:07:15 +0800</pubDate><description><![CDATA[这道题主要用于踩坑，比如memset得看情况使用。。。。题目是简单题，单纯的贪心+模拟就能过，但是为什么有个图的标签呢？题目
#include &lt;bits/stdc++.h&gt;
using namespace std;
int boy[100005];
int main()
{.
    int t;
    scanf("%d",&amp;t);
    while(t--)
    {
        int n,m,x;
        scanf("%d",&amp;n);
       ]]></description><category></category></item><item><title><![CDATA[ZJUT-DAY3 树链剖分]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/108913458</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/108913458</guid><author>shordinger</author><pubDate>Sat, 03 Oct 2020 21:09:05 +0800</pubDate><description><![CDATA[今天又是和树互砍的一天呢，这玩意我明天必然得复习一遍，修到最后自己都不知道是怎么过的，还用了大佬的板子。
#include &lt;bits/stdc++.h&gt;
using namespace std;
//#define int long long
#define lson rt &lt;&lt; 1
#define rson rt &lt;&lt; 1 | 1
typedef long long ll;
typedef pair&lt;int, int&gt; pii;
typedef pair&]]></description><category></category></item><item><title><![CDATA[ZJUT12-DAY2 树的直径]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/108906228</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/108906228</guid><author>shordinger</author><pubDate>Fri, 02 Oct 2020 23:58:25 +0800</pubDate><description><![CDATA[今天又是复习（预习）的一天呢，码一个树的直径，虽然题目没有边权，不过这个代码只要把权值从1改为原本的权值就可以了。另外，它也可以用于判断有多少条直径，只要记录一下第一次的最大点有几个，第二次有几个，重复的有几个（其实一旦重复，必然是第一次的个数减一）这非常的方便。题目链接SP1437 PT07Z - Longest path in a tree
#include &lt;bits/stdc++.h&gt;
using namespace std;
const int maxn = 2e5 + 5;
stru]]></description><category></category></item><item><title><![CDATA[ZJUT12-DAY1 主席树]]></title><link>https://blog.youkuaiyun.com/shordinger/article/details/108897649</link><guid>https://blog.youkuaiyun.com/shordinger/article/details/108897649</guid><author>shordinger</author><pubDate>Thu, 01 Oct 2020 22:22:07 +0800</pubDate><description><![CDATA[众所周知，面对大师们的各种究极数据结构，我们只有膜拜的份。想当年还在苦苦挣扎区间最大值的时候，巨佬们已经在赛场上现场手撸区间第K大了。（所以人们就这么喜欢人名命名法嘛。。。）
好的，现在我也会了。（希望明天起来我还记得）
（下面本应该有分析）
#include &lt;bits/stdc++.h&gt;
#define maxn 200010
using namespace std;
int a[maxn], b[maxn], n, m, q, p, sz;
int Left[maxn &lt;&lt; 5]]></description><category></category></item></channel></rss>