<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Dawn-K の Blog]]></title><description><![CDATA[人一我百，人十我万]]></description><link>https://blog.youkuaiyun.com/a1307754356</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a1307754356]]></copyright><item><title><![CDATA[线性基入门]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/100902259</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/100902259</guid><author>a1307754356</author><pubDate>Mon, 16 Sep 2019 21:20:56 +0800</pubDate><description><![CDATA[线性基
参考资料
参考资料2
模板来源
概述

线性基是一种擅长处理异或问题的数据结构.设值域为[1,NNN]，就可以用一个长度为⌈log⁡2N⌉\lceil \log_2N \rceil⌈log2​N⌉的数组来描述一个线性基。特别地，线性基第iii位上的数二进制下最高位也为第iii位。

性质

原序列里面的任意一个数都可以由线性基里面的一些数异或得到(也能异或得到一些不存在于集合的数)
线性基...]]></description><category></category></item><item><title><![CDATA[SPFA]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/98690303</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/98690303</guid><author>a1307754356</author><pubDate>Wed, 07 Aug 2019 01:53:35 +0800</pubDate><description><![CDATA[SPFA
简介
SPFA算法是一种求单源最短路的算法，其BFS写法是基于Ford的队列优化。但是尤其其经常被卡，所以一般不用于正权图，而是用于负权图来求最短路或者判断负环。
算法思想
主要思路是动态逼近法，也就是不断优化，直到无法优化路径。

我们设置一个队列，用于存储待优化的节点。
每次将队首节点出队，然后用其松弛邻接的结点，如果能松弛，则将可松弛的节点的距离更新，然后将可松弛节点加入队列。
循...]]></description><category></category></item><item><title><![CDATA[日期计算]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/98661238</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/98661238</guid><author>a1307754356</author><pubDate>Tue, 06 Aug 2019 21:07:43 +0800</pubDate><description><![CDATA[日期计算
介绍
日期计算问题就是给出一个合法日期，计算此日期是星期几。这个涉及到一些历法和数学的知识，但是有很好用的公式可以使用。
蔡勒公式
1582年10月4日之后：w=y1+(y1/4)+(c/4)-2*c+(26*(m+1)/10)+d-1;
1582年10月4日以及之前：w=y1+y/4+c/4-2*c+13*(m+1)/5+d+2;
输出：(w%7+7)%7     （为了确保结果为正数...]]></description><category></category></item><item><title><![CDATA[N数码问题]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97972981</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97972981</guid><author>a1307754356</author><pubDate>Wed, 31 Jul 2019 22:40:39 +0800</pubDate><description><![CDATA[N数码问题
简介
我们先引入一个简单的问题.

首先，这里的拼图游戏是滑块拼图，类似于华容道，游戏者通过移动拼图块将拼图还原为初始形状。关于拼图，常见的有3x3，4x4，多的以至于有16x16不等。一般块数越多拼图越复杂。


如图所示,我们可以用空格与其上下左右相邻的位置的方块进行交换.给你两个局面,问这两个局面能不能互相转化.
分析
这个就是著名的N数码问题,我们为了严谨,在之后的讨论中都是N...]]></description><category></category></item><item><title><![CDATA[Trie 树]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97958176</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97958176</guid><author>a1307754356</author><pubDate>Wed, 31 Jul 2019 20:28:18 +0800</pubDate><description><![CDATA[Trie 树
参考资料
介绍
Trie树是一种高级数据结构,用于解决多模式串匹配问题(KMP算法是用以解决单模式串匹配),其主要思想是利用树形结构,(树上除根节点外,每一个节点都对应着一个字符),使得前缀相同的单词共用前缀部分的节点.加快匹配速度.

模板
// 个人倾向于使用数组形式的字典树,动态节点类型不好debug
//对于字符串比较多的要统计个数的，map被卡的情况下，直接用字典树
//很...]]></description><category></category></item><item><title><![CDATA[ST表&LCA&RMQ]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97822081</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97822081</guid><author>a1307754356</author><pubDate>Tue, 30 Jul 2019 21:48:35 +0800</pubDate><description><![CDATA[SparseTable
RMQ问题

RMQ (Range Minimum/Maximum Query)问题是指：对于长度为n的数列A，回答若干询问RMQ(A,i,j)(i,j&lt;=n)，返回数列A中下标在i,j里的最小(大）值，也就是说，RMQ问题是指求区间最值的问题。

算法

朴素（即搜索），O(n)-O(qn)online。
线段树，O(n)-O(qlogn)online。(这个稍后补...]]></description><category></category></item><item><title><![CDATA[单调栈&单调队列]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97821924</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97821924</guid><author>a1307754356</author><pubDate>Tue, 30 Jul 2019 21:46:54 +0800</pubDate><description><![CDATA[单调栈&amp;单调队列
介绍
单调栈和单调队列是两种很简单,但是很强大的数据结构.一般不会直接出裸题,常常作为优化手段使用.(多见于dp)
单调队列实际上是升级版的单调栈.
单调栈
单调栈可以在O(n)时间复杂度下完成以下操作

对于给定的a[ ]数组,在O(n)时间内生成数组 L[ ],其中L[i]表示a[i] 左边/右边 第一个 小于/大于 a[i]的元素的下标(常记录下标,可以使得操作更灵...]]></description><category></category></item><item><title><![CDATA[树状数组]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97821802</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97821802</guid><author>a1307754356</author><pubDate>Tue, 30 Jul 2019 21:45:43 +0800</pubDate><description><![CDATA[树状数组

十年岐路，空负曲江花

介绍
参考资料
树状数组就是以数组的形式来模拟树,在代码很简洁的情况下,能起到部分代替线段树的效果.而且此算法常数较小,空间开销也很小,是一个非常轻量级的数据结构.
思想

图中黑色的是原数组,红色的是树状数组.我们发现树状数组的空间开销是O(n)的.我们以八个元素(从1开始记数会比较方便)求和为例.假设原数组是a[],树状数组是c[].
我们不难发现

C[1...]]></description><category></category></item><item><title><![CDATA[链式前向星]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97821650</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97821650</guid><author>a1307754356</author><pubDate>Tue, 30 Jul 2019 21:44:39 +0800</pubDate><description><![CDATA[链式前向星
介绍
链式前向星是一种用于存图的数据结构,比较适用于存稀疏图.其综合了邻接表,邻接矩阵的优缺点,然后在前向星的基础上进行改进.
时间复杂度,空间复杂度,查询复杂度都是O(m)
初始化
void CFSInit() { // 链式前向星初始化
    cnt = 1; // 其实这里是0也无所谓
    memset(head, 0, sizeof(head));
}

插入
void ...]]></description><category></category></item><item><title><![CDATA[分层最短路]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97821490</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97821490</guid><author>a1307754356</author><pubDate>Tue, 30 Jul 2019 21:43:26 +0800</pubDate><description><![CDATA[分层最短路
介绍

分层图最短路在最短路的基础上,增加了一个条件:可将 k 条边的权值变为 0.

分析
这种问题我们可以想到一种做法:

如图,我们构建一个多层的图,其中每一层都是和题目中给的图相同.(图中假设k==1)上面的层表示不将任何边的权值变为0,而下面的这一层表示使用了这个机会后的状态.
也就是0号节点可以不使用机会,转移到2号节点,也可以使用机会转移到7号(其实就是二号的镜像节点)....]]></description><category></category></item><item><title><![CDATA[斯特林公式]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97821399</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97821399</guid><author>a1307754356</author><pubDate>Tue, 30 Jul 2019 21:42:26 +0800</pubDate><description><![CDATA[斯特林公式
简介
斯特林公式的常见表示形式

显而易见,这个公式主要是用来求近似的阶乘的值的,在竞赛中往往只采用第一个形式,其精确度已经足够用来求阶乘位数了.
lg(n!)=lg(2πn)/2+n∗(lg(n)−lg(e))  这个公式就是图中第一个式子左右同时求对数得到的.
不难发现,[10x,10(x+1) )之间囊括了所有长度为x+1的数,而lg(m*10^x)=x+lg(m) ,而lg(m...]]></description><category></category></item><item><title><![CDATA[树的直径]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97821297</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97821297</guid><author>a1307754356</author><pubDate>Tue, 30 Jul 2019 21:41:37 +0800</pubDate><description><![CDATA[树的直径
概念
给定一棵树,树中每个边都有权值,树中两点之间的距离定义为连接两点的路径边权和.树中最远的两点之间的距离称之为树的直径,也就是树的最长链(偶尔也指代为一条路径).
树的直径有两种求法,都是O(n)的.一种是基于树形dp(之后再补上).一种是基于搜索.
搜索
我们随便找一个节点作为根(之前如果有根就不用换).进行一次搜索,找到距离根最远的节点p,然后再将p作为起点,寻找一个距离p最远的...]]></description><category></category></item><item><title><![CDATA[MR素性探测]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/97821076</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/97821076</guid><author>a1307754356</author><pubDate>Tue, 30 Jul 2019 21:40:43 +0800</pubDate><description><![CDATA[MR素性探测
简介
MR算法全称是Miller-Rabin测试,是一个非确定的算法,用于判断一个数是否是质数.虽然是一个非确定的算法,但是只要巧妙地选取参数,在一定范围内就是一个确定性的算法.
前置条件:费马小定理 1 ≡ a^(p-1) (mod p)

Miller和Rabin两个人的工作让Fermat素性测试迈出了革命性的一步，建立了传说中的Miller-Rabin素性测试算法。 新的测试基...]]></description><category></category></item><item><title><![CDATA[HDU2546饭卡(01dp+sort)]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/89198936</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/89198936</guid><author>a1307754356</author><pubDate>Wed, 10 Apr 2019 23:37:01 +0800</pubDate><description><![CDATA[HDU2546
文章目录HDU2546题意输入输出思路关键结论AC代码
题意

电子科大本部食堂的饭卡有一种很诡异的设计，即在购买之前判断余额。如果购买一个商品之前，卡上的剩余金额大于或等于5元，就一定可以购买成功（即使购买后卡上余额为负），否则无法购买（即使金额足够）。所以大家都希望尽量使卡上的余额最少。
某天，食堂中有n种菜出售，每种菜可购买一次。已知每种菜的价格以及卡上的余额，问最少可使卡上...]]></description><category></category></item><item><title><![CDATA[HDU3466 Proud Merchants (01dp + 排序)]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/89198907</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/89198907</guid><author>a1307754356</author><pubDate>Wed, 10 Apr 2019 23:35:56 +0800</pubDate><description><![CDATA[HDU3466
文章目录HDU3466中文题意思路AC代码启示
中文题意

给出n个商品,以及自己的钱数m,然后以下n行,每一行给出p,q,v三个数,表示第i个商品的价格,以及最少需要多少钱才能进行购买,和收益
求最大价值

思路
根据HDU2546(饭卡)的经验,我们也不难发现这个题的产品应该也是需要排序的,但是每个商品有两个变量,这个就带来了排序的困难.
如果仅凭直觉,到底是以哪个参数排序为主...]]></description><category></category></item><item><title><![CDATA[马拉车算法]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/89071174</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/89071174</guid><author>a1307754356</author><pubDate>Sun, 07 Apr 2019 16:27:36 +0800</pubDate><description><![CDATA[马拉车算法
参考资料
文章目录马拉车算法简介思路变量预处理算法代码
简介

马拉车算法是一种在O(n)时间内求一个字符串的最长回文子串的算法

思路
对于最长回文子串,我们可以有很多朴素算法

比如穷举所有子串,然后验证这些子串是否是回文的,这样的复杂度是O(n^3),
比如我们遍历数组,对于每一个元素,我们都认为其是某个回文子串的中心,我们同时向两边伸展,然后取其中的最大值,这样的算法的复杂度是...]]></description><category></category></item><item><title><![CDATA[CF455A Boredom(简单dp)]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/88726069</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/88726069</guid><author>a1307754356</author><pubDate>Thu, 21 Mar 2019 21:09:10 +0800</pubDate><description><![CDATA[CF455A
题目链接
文章目录CF455A题意输入输出解析代码启示大神代码
题意

给你长为 N 的整数序列a,你可以选择其中一个数ak,你会得到与这个数相同的分数,然后数列中和 ak+1 ak-1相同的数都会被删掉,求最多的分数

输入
第一行给出一个n
接下来在一行中给出 n个数,第i个数表示ai
输出
输出可得到的最多的分数
解析
这个题肯定是用哈希来表示每个数出现了多少次,然后自小到大遍...]]></description><category></category></item><item><title><![CDATA[CF1034A Enlarge GCD(数论+贪心)]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/88721650</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/88721650</guid><author>a1307754356</author><pubDate>Thu, 21 Mar 2019 17:55:52 +0800</pubDate><description><![CDATA[CF1034A
文章目录CF1034A题意输入输出解析代码
题意

给你n个数,求最少去掉几个数能让这些数的最大公因数变大

输入
第一行给出一个n(2&lt;=n&lt;=3e5)
第二行给出n个数,表示a1,a2…an,其中ai表示第i个数
输出
输出最少删掉的数
解析
关于一堆数的最大公约数,思路还是唯一分解定理.然后我们发现对于每个质因数,似乎只要把为0的去掉就可以了,但是!!!
如果
a...]]></description><category></category></item><item><title><![CDATA[CF1027D Mouse Hunt(dfs+图论)]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/88689982</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/88689982</guid><author>a1307754356</author><pubDate>Wed, 20 Mar 2019 15:23:00 +0800</pubDate><description><![CDATA[CF1027D
文章目录CF1027D题意输入输出解析代码启示
题意

n间宿舍里有老鼠,老鼠(只有一只)可能出现在任何一间寝室,然后它在第i个寝室里待一秒后一定会跑向第c[i]个寝室,给出在每个寝室布置陷阱的成本,求无论老鼠初始出现在那个寝室,一定会被抓住的最低成本.

输入
第一行给出n(1&lt;=n&lt;=2e5)
第二行给出n个数字,每个大小都是[1,1e4],第i个表示c[i],即在...]]></description><category></category></item><item><title><![CDATA[CF1029C Maximal Intersection(枚举)]]></title><link>https://blog.youkuaiyun.com/a1307754356/article/details/88689434</link><guid>https://blog.youkuaiyun.com/a1307754356/article/details/88689434</guid><author>a1307754356</author><pubDate>Wed, 20 Mar 2019 15:07:40 +0800</pubDate><description><![CDATA[CF1029C
文章目录CF1029C题意输入输出解析代码启示
题意

给你n个线段,给出其左右端点,求去掉其中一个边,剩下的线段的最大交集

输入
第一行给出一个n(2&lt;=n&lt;=3e5)
接下来N行,每一行给出l,r(0&lt;=l&lt;=r&lt;=1e9)
输出
输出n-1条边的最大交集.
解析
看到这个题我想起了之前做过的一个题(CF1132C),博客链接
当时那个题是枚举去...]]></description><category></category></item></channel></rss>