<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LiangNiuMu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/LiangNiuMu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LiangNiuMu]]></copyright><item><title><![CDATA[上海区域赛总结]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/111149250</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/111149250</guid><author>LiangNiuMu</author><pubDate>Mon, 14 Dec 2020 08:36:21 +0800</pubDate><description><![CDATA[总结一下这次上海区域赛

1. 做题情况

这次总共做出3题，罚时比较多


首先做的是G题，也是水题吧，但是遇到的问题是推出公式了，一开始为了代码简便就进行了公式的化简，结果产生了偏差，然后没化简公式带入过了
M题的话直接map暴力存储，比赛中出现的问题是一个continue写错位置了，导致字符串没有累加
B题主要是思维题，进行反转即可，不过出现了字符串越界问题，也是第一次遇到字符串赋值出错，只能先预处理

2. 最后的时间
最后主要都在思考D题，其实思路大体类似，一开始就想到了二分，但是不知道拿什么为.]]></description><category></category></item><item><title><![CDATA[Codeforces Beta Round #73(Div2)]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/110748374</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/110748374</guid><author>LiangNiuMu</author><pubDate>Sun, 06 Dec 2020 17:58:02 +0800</pubDate><description><![CDATA[这套CF练习题感觉有点迷，坑好多

传送门
A - Chord
思路：

给予C 、C#、D、D#、E、F、F#、G、G#、A、B、H，这12个符号，题目给予3个符号，如果相隔 4 3，那么就输出“major”，如果相隔3 4，就输出“minor”，否则就输出“strange”。
排着循环遍历即可，判断他们之间的距离（mp存一下），然后判断输出即可。

代码：
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cstring&gt.]]></description><category></category></item><item><title><![CDATA[2018-2019 Asia Nanjing Regional Contest]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/110457030</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/110457030</guid><author>LiangNiuMu</author><pubDate>Tue, 01 Dec 2020 23:54:30 +0800</pubDate><description><![CDATA[A - Adrien and Austin Gym - 101981A

博弈思维题，一开始没想明白，最后才整明白，真的很简单

思维：

其实也就是3种情况吧，一种是 n==0n == 0n==0 的情况，这种后手肯定赢
第二种是n 为偶数， k 为 1 这样后手也肯定赢
第三种是就是剩余的情况，因为剩余情况总能变成两堆相同的，根据前面的来走后面的即可（第二种情况不可）

代码：
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;]]></description><category></category></item><item><title><![CDATA[天梯赛练习第一周]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109573125</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109573125</guid><author>LiangNiuMu</author><pubDate>Mon, 09 Nov 2020 11:49:14 +0800</pubDate><description><![CDATA[2020 - 11 - 09

做题情况：      L1 4题（15 — 20分）


7-1 打印沙漏   10:55 — 11:08  用时：13min （20分题）
7-2 到底有多二  11:09 — 11:16 用时： 7min (15分题)
7-3 谁先倒    11:17— 11:27  用时：10min（15分题）
7-4 帅到没朋友  11:28 — 11 ：43 用时 15min（20分题） 卡的点：输出5位，前补0没注意


...]]></description><category></category></item><item><title><![CDATA[Tarjan算法]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109328522</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109328522</guid><author>LiangNiuMu</author><pubDate>Wed, 28 Oct 2020 11:19:49 +0800</pubDate><description><![CDATA[Tarjan算法

Tarjan算法主要解决图论中求割点和割边的算法，通常使用邻接表存储图，然后根据回溯方法进行判断。

相关变量介绍：

low[u]low[u]low[u] 表示顶点u及其子树中的点，通过非父子边（回边），能够回溯到的最早的点（dfn最小）的dfn值（但不能通过连接u与其父节点的边）
dfn[u]dfn[ u ]dfn[u] 存储 u 点被访问的时间戳（第几个被访问）

Tarjan代码详解：

res[u]res[u]res[u] 主要存储 u 点去除后可分为几个子强联通块
bridg]]></description><category></category></item><item><title><![CDATA[2017 Shenyang onsite replay L - Tree]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109149365</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109149365</guid><author>LiangNiuMu</author><pubDate>Sun, 18 Oct 2020 20:18:18 +0800</pubDate><description><![CDATA[这里主要补一下L题，感觉也是挺巧妙的，不过也不难

传送门
题目大意：

给予一个无根树，然后给予K种颜色，求将所有颜色的点都连接起来，这K种颜色最多有多少条公共的边。

解题思路：

首先看一个图，我们直接拆分边，如果这个边的两端都有&gt;=k 个点，那么这条边就可以公共通过。



假如K == 3， 那么如果我切割中间的边， 那么左右的点的数目都是 &gt;= 3 ，就符合条件，所以我们根据这个性质来继续解题。
因此我们只需要找一个点作为根即可。（找度为1的点，比较方便）
然后我们记录每个点有多少.]]></description><category></category></item><item><title><![CDATA[2020 - 10 - 18 ACM 周总结]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109149139</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109149139</guid><author>LiangNiuMu</author><pubDate>Sun, 18 Oct 2020 20:03:51 +0800</pubDate><description><![CDATA[一、学习相关内容：

复习了相关数学的知识
复习相关大数的知识
整理大数模板
看了一些博弈的思想

二、 本周总结：
本周事情比较多，做的题也相对较少，做了一套小白月赛27，然后做了10多道蓝桥杯的题目，周六考了4小时的蓝桥杯（稀碎），周天打了组队赛，相当于没学什么新的算法，主要是复习了，锻炼了一下思维。
下周计划：

数论没补完的补完
线段树


...]]></description><category></category></item><item><title><![CDATA[牛客 — 小白月赛28]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109043703</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109043703</guid><author>LiangNiuMu</author><pubDate>Tue, 13 Oct 2020 09:43:24 +0800</pubDate><description><![CDATA[发现小白月赛挺好，涉及到很多基础算法，正好复习相关算法

传送门
A. 牛牛和牛可乐的赌约

主要思路： 这题就是一个很基础的求概率的题，用到了逆元（模板题），只要会逆元，就可以轻松解决。

解题思路：

首先每次投出n的概率都是 1/n1/n1/n，所以投出 m 次 n 的概率就是1/nm1/n^m1/nm
所以，牛牛输的概率为 1 - 1/nm1/n^m1/nm， 很显然1/nm1/n^m1/nm 用到了逆元，直接带入求结果即可。
另外一点就是，exp求的时候如果乘积也算进去，会变的很慢（TLE）。
.]]></description><category></category></item><item><title><![CDATA[天梯赛补题  —— 2020-10.11]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109015833</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109015833</guid><author>LiangNiuMu</author><pubDate>Sun, 11 Oct 2020 19:45:06 +0800</pubDate><description><![CDATA[这次天梯还凑合吧只能说，25分的题目自己基本都会相关的算法，运气好一些，35分的题就不会了

这里补一下链表去重的那个题
题目大意：

给予头指针和相关的链表数目，然后求出绝对值不同的链表，然后再求出需要删除的链表

解题思路：

这题一开始想复杂了，想怎么判断下一个（甚至是下下个）是否出现，导致写的很乱
最后改成了首先判断当前的指针的值是否出现，如果出现，将头指针存入删除的数组中，并继续，如果未出现，存入输出的数组中，然后继续即可。
最终要判断下知否存在y值（网上代码有错的）

代码：
#include.]]></description><category></category></item><item><title><![CDATA[2020 - 10 - 11 ACM 周总结]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109015710</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/109015710</guid><author>LiangNiuMu</author><pubDate>Sun, 11 Oct 2020 19:31:33 +0800</pubDate><description><![CDATA[一、学习相关内容：

复习逆元
复习KMP
复习了一些dp
看了一些数论的推导
复习并查集

二、本周总结：
很多知识点，相关算法都有些遗忘，知道有这个算法，但是用起来不熟练或者不太会用了，这周主要是复习了下相关算法，然后做了几个相关的题目，熟练了一下，看了一些白书的题，看了看之前做过的题。
天梯赛还有一些细节没能处理好，有时候数据也太水，下次试着多想。
三、下周学习规划与目标：

找相关的试题进行练习
学习数论的相关知识
复习树状数组和线段树相关知识


...]]></description><category></category></item><item><title><![CDATA[2020 — CCPC 总结]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/108825002</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/108825002</guid><author>LiangNiuMu</author><pubDate>Sun, 27 Sep 2020 11:50:23 +0800</pubDate><description><![CDATA[这次CCPC做出4题，做出的题数少，而且wa也不少。

先总结wa题的几点原因：

长时间没打比赛，有些数据范围和相关排序整错，或者是数组的大小
太着急，过了样例有时候复杂度没有计算好就着急交

总结过题数目少原因：

长时间没打，没有做题的感觉
复习期末考试，很多算法假期学的都不熟，学的不全面
基础算法没有整理好，思维不灵活
心态没有调整好,做到一半就感觉没啥希望了，也做不出题
最重要的是自己没有好好练习，假期的时候状态还不错可以天天练，打了很多CF，18号来当志愿者后基本就是一点代码没敲，然后快开学开.]]></description><category></category></item><item><title><![CDATA[Codeforces Round #651 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106917984</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106917984</guid><author>LiangNiuMu</author><pubDate>Tue, 23 Jun 2020 11:36:25 +0800</pubDate><description><![CDATA[这里写下ABCDE吧，这次思路感觉不是怎么很明确

传送门
A.	Maximum GCD

主要思路：n/2即可

解题思路：

由于让求1 &lt;= x &lt; y &lt;= n, 求 max(gcd(x,y))， 那么如果x = k, 那么最大情况,  y = 2k， 这样他们的最大公约数就为k
因此最大值就是n / 2（倍数关系，二倍是最小的）

代码：
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cstring.]]></description><category></category></item><item><title><![CDATA[Codeforces Round #649 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106752773</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106752773</guid><author>LiangNiuMu</author><pubDate>Sun, 14 Jun 2020 22:25:33 +0800</pubDate><description><![CDATA[手速思路还是太慢了，放假后要抓紧练习才行

传送门
A.	XXXXX

主要思路： 首先求出全部的和是否是x的倍数，如果不是，则输出n, 如果是，那么找前后第一个余数不为0的点即可。

解题思路：

首先我们对所有数求和，如果不是x的倍数，那么直接输出n
然后我们判断是x的倍数的情况，那么我们只要前后找一个位置，这个位置他不是x的倍数即可，然后我们求这个长度的最大值。

代码：
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;c.]]></description><category></category></item><item><title><![CDATA[Educational Codeforces Round 89 (Rated for Div. 2)]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106723640</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106723640</guid><author>LiangNiuMu</author><pubDate>Fri, 12 Jun 2020 21:44:15 +0800</pubDate><description><![CDATA[这次比赛的题目挺好，又是无限wa，这里写下ABCD的题解

传送门
A.	Shovels and Swords

主要思路： 找相同的时候，然后 /3 * 2 找最大值

解题思路：

首先我们分情况讨论，最简单的情况就是相同，那么当 a , b 都选出3个的时候，能组成2个，这个是最多的情况，我们还要判断是否是否留了2个，如果留了2个，那么还可以制造一个。
然后我们之间考虑a &gt; b这种情况（换一下即可）。
首先我们看他们之间的差值  x = a - b, 如果 b &lt; x，那么 res =.]]></description><category></category></item><item><title><![CDATA[Codeforces Round #648 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106632274</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106632274</guid><author>LiangNiuMu</author><pubDate>Tue, 09 Jun 2020 00:51:43 +0800</pubDate><description><![CDATA[这次状态不好，总是wa题，心态都有点炸了，这里写下CDEF(F有时间就写上)

传送门
C. Rotation Matching

主要思路： 主要是看两个相同的值的差距距离，然后计算差距距离最多的数值是多少即可

解题思路：

这题还是比较简单的思维题
首先我们可以想到我们计算两个数组相同值差的距离，这里我们用： 第一个数组的值的位置 - 第二个数组值的位置 + n  % n 即可，表达式：（res是记录的差值为x时的个数）

scanf("%d",&amp;b[i]);
int x = (aa[b[i.]]></description><category></category></item><item><title><![CDATA[Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106576230</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106576230</guid><author>LiangNiuMu</author><pubDate>Fri, 05 Jun 2020 19:07:49 +0800</pubDate><description><![CDATA[这里就补下BCD吧，这次打思路太慢了

传送门
B.	Johnny and His Hobbies

主要思路：  首先看到是1 — 1024，那么直接枚举1 — 2048 ，看看是否符合条件即可（是否和原来的一样）

解题思路：

首先枚举1 — 2048 这些数，然后直接与输入的值进行 ^ 异或操作，然后判断这个值是否在原本输入数据中，并且看是否有重复的
主要是处理初始化，也没什么难的，暴力就ok

代码：
#include &lt;iostream&gt;
#include &lt;cstdio&g.]]></description><category></category></item><item><title><![CDATA[Codeforces Round #646 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106483704</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106483704</guid><author>LiangNiuMu</author><pubDate>Mon, 01 Jun 2020 23:29:57 +0800</pubDate><description><![CDATA[这次CF有事没打，后期补了ABCE

传送门
A.	 Odd Selection

总思路：   循环找出奇数个奇数，判断是否存在符合的情况

解题思路：

首先要求 x 个数，他们的数之和为奇数
这个题有O（1） 做法，不过相对麻烦些，这里写一下稍微思维简单些的O（n）做法
首先输入，我们求出 有 a 个奇数， b 个偶数
给予的 x 的个数，我们肯定会选出奇数个奇数，剩下的选偶数就可以，所以我们根据这个规律直接循环。

for (int i = 1; i &lt;= x; i += 2){
    i.]]></description><category></category></item><item><title><![CDATA[Codeforces Round #635 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106410349</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106410349</guid><author>LiangNiuMu</author><pubDate>Thu, 28 May 2020 18:19:29 +0800</pubDate><description><![CDATA[这里单纯写下C题的题解，后期有时间写下别的题

传送门
C.Linova and Kingdom
设计知识点：

dfs、思维、贪心

解题思路：

根据题意我们了解掉，我们尽量选距离根节点1较远的点作为工厂，肯定会考虑到每个点距根节点的距离，这里利用dfs来搜索进行存储，然后我们如何选择点成为了关键
这里我们想一下，如果当前点作为工厂，那么他的贡献度为 ：  当前点的深度 - 前面的黑色的点（就是工厂）
那么我们转换一下，我们的贪心思想是 当前点的深度 - 其子节点的数目 （deep  -   size.]]></description><category></category></item><item><title><![CDATA[Codeforces Round #645 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106392047</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106392047</guid><author>LiangNiuMu</author><pubDate>Wed, 27 May 2020 23:04:24 +0800</pubDate><description><![CDATA[这次DIV2 有点难搞，这里补一下CD题，感觉自己做难题的速度还是不太行

传送门
C题解题思路：


首先C题可以自己先瞎推推，首先要写一下，不能盲目的猜，因为路径和里有相同的数（自己举例一下就好）


然后其中可以满足的数目其实就是路途上的数的和的 最大值 - 最小值 + 1， 这个应该好理解吧。


然后我们求最大值最小值的差值即可，最大值是先向下走，再向右走，最小值是先向右走，再向下走（这个规律还是比较容易发现的），如果想单纯的直接累加求肯定是爆掉的，然后找他们之间的规律。


首先我们看下图，图.]]></description><category></category></item><item><title><![CDATA[Codeforces Round #617 (Div. 3) --- E2]]></title><link>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106375931</link><guid>https://blog.youkuaiyun.com/LiangNiuMu/article/details/106375931</guid><author>LiangNiuMu</author><pubDate>Wed, 27 May 2020 10:56:57 +0800</pubDate><description><![CDATA[通过做这道题学到了很多知识，还是很好的，用到Dilworth定理

题目传送门
Dilworth定理
解题思路：

就是给你一堆字母，ababcdba，最终让你排成aaabbbcd(字典序最小)
如果2个位置的字母涂的颜色不同，那么他们可以交换，问的是用最少的颜色进行涂色，我们最少需要多少种颜色， 而且将他们的位置的颜色标记出来。
这里用到Dilworth定理：不上升子序列的数目 == 最长下降子序列的长度 （反之亦然，如果想看正面的点上面的链接即可）
这个题简单的来说是找有多少个不下降子序列，也就是能划.]]></description><category></category></item></channel></rss>