<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[aomen8092的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/aomen8092</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; aomen8092]]></copyright><item><title><![CDATA[HDU 3518 Boring counting （后缀自动机）]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476582</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476582</guid><author>aomen8092</author><pubDate>Wed, 25 Sep 2019 09:23:00 +0800</pubDate><description><![CDATA[统计至少出现两次的不重叠子串的个数
后缀数组可做，所以我用后缀自动机
考虑到任意子串都包含在sam的某个状态中，所以对于某个状态st，只要| endpos(st) | &gt;= 2
则状态中长度 &lt;= ( max( endpos( st ) ) - min( endpos ( st ) )的子串都是满足条件的
所以只需要求出两个数组L[ i ]，R[ i ]，分别表示endpos...]]></description><category></category></item><item><title><![CDATA[hiho #1449 : 后缀自动机三·重复旋律6]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476578</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476578</guid><author>aomen8092</author><pubDate>Fri, 20 Sep 2019 16:06:00 +0800</pubDate><description><![CDATA[K = 1..length(S)求出所有长度为K的子串中出现次数最多的子串的出现次数
| endpos(st) |就是st这个状态包含的子串在S中出现的次数
在parent tree上自底向上累加| endpos |,考虑特殊情况：当前状态包含S的前缀，则额外+1，最后统计答案即可
#include &lt;bits/stdc++.h&gt;
#define Cpy(a, b) memc...]]></description><category></category></item><item><title><![CDATA[HDU 5769 Substring (后缀数组)]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476581</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476581</guid><author>aomen8092</author><pubDate>Mon, 16 Sep 2019 17:33:00 +0800</pubDate><description><![CDATA[题意：给定一个字符串和字符X，问有多少个包含X的不同子串
考虑后缀数组求不同子串的方法 : $ \sum_{i=1}^{n}(len+1-(sa[i]+height[i])) $
可以看出，对于每个i所贡献的所有子串都是以 sa[i] 开始，分别以 sa[i] + height[i] + 1 , sa[i] + height[i] + 2 ··· len 结尾的子串，所以只需要考虑在区间...]]></description><category></category></item><item><title><![CDATA[HDU 5008 Boring String Problem ( 后缀数组 )]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476576</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476576</guid><author>aomen8092</author><pubDate>Mon, 09 Sep 2019 21:45:00 +0800</pubDate><description><![CDATA[题意：给定一个字符串，q次询问，每次询问给定一个数k，查询原串的所有不同子串中字典序第k小的子串在原串中的开始和结束位置，若有多个答案则输出最小的开始位置，不存在输出0 0

后缀自动机经典问题，所以我用后缀数组
预处理sum数组记录不同字符串的个数，即sum[i] = len - sa[i] + 1 -height[i] + sum[i-1] (len为原串长度)
对于每...]]></description><category></category></item><item><title><![CDATA[2019 CCPC 网络赛第三题 K-th occurrence 后缀数组+划分树+ST表+二分]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476577</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476577</guid><author>aomen8092</author><pubDate>Sat, 24 Aug 2019 00:48:00 +0800</pubDate><description><![CDATA[题意：给你一个长度为n的字符串，每次询问给出三个数：L , R , K,表示原串 L 到 R 的子串在原串第K次出现的首字母的位置
解题思路：对子串的大量操作，不难想到后缀数组（后缀树/后缀自动机不会，所以没想到），注意到子串s[L.....R]必然是某一个后缀的前缀，所以所有前缀是该子串的后缀的排名（即rank数组的值）必定连续，也就是说在后缀数组（sa数组）中，下标是连续的，那么就...]]></description><category></category></item><item><title><![CDATA[若干结论和定理（持续更新）]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476575</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476575</guid><author>aomen8092</author><pubDate>Wed, 21 Aug 2019 09:35:00 +0800</pubDate><description><![CDATA[gcd(xa- 1 , xb- 1) = xgcd(a , b)- 1 (x&gt;1,a,b&gt;0) （HDU 2685）
gcd(fib[ m ] , fib[ n ]) = fib[ gcd(m , n) ] fib是斐波那契数列
gcd(fib[ m ] , fib[ n ]) = fib[ gcd(m , n) ]
lcm(ka , kb) = k...]]></description><category></category></item><item><title><![CDATA[法雷（法里）序列]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476574</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476574</guid><author>aomen8092</author><pubDate>Sun, 18 Aug 2019 15:15:00 +0800</pubDate><description><![CDATA[定义：
　　对任意给定的一个自然数n，将分母小于等于n的不可约的真分数按升序排列，并且在第一个分数之前加上0/1，在最后一个分数之后加上1/1，这个序列称为n级法雷数列，即法雷数列是0和1之间最简分数升序排列的数列，所以n级法雷数列的个数即为 满足 1 &lt;= a &lt; b &lt;= n &amp;&amp; gcd( a , b ) == 1 的二元组( a , b )的数...]]></description><category></category></item><item><title><![CDATA[HDU 3374 String Problem （KMP+最大最小表示法）]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476571</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476571</guid><author>aomen8092</author><pubDate>Tue, 13 Aug 2019 15:40:00 +0800</pubDate><description><![CDATA[题意：输出目标字符串最小表示的下标和数量，最大表示的下标和数量
题解：最大最小表示法模板题，数量也好求，用KMP的next数组求循环节即可（字符串循环节）

#include&lt;cstring&gt;
#include&lt;cstdio&gt;
using namespace std;
const int maxn=1000010;
char s[maxn];
in...]]></description><category></category></item><item><title><![CDATA[字符串循环节 POJ2406 Power Strings 为例]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476573</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476573</guid><author>aomen8092</author><pubDate>Tue, 13 Aug 2019 15:23:00 +0800</pubDate><description><![CDATA[题意：找到字符串一个循环节使其循环次数最大，输出最大循环次数，没有循环节输出1
题解：KMP的next数组，next[ i ]表示前 i 个字符相同前后缀的最大长度，所以next[ len ]表示整个字符串的相同前后缀的最大长度，len-next[len]就是最小循环节的长度了，如果len % (len-next[len])==0,答案即为len / (len-nx[len])，否则...]]></description><category></category></item><item><title><![CDATA[2019牛客多校第八场 A  All-one Matrices]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476570</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476570</guid><author>aomen8092</author><pubDate>Sun, 11 Aug 2019 16:01:00 +0800</pubDate><description><![CDATA[题意：在01矩阵中求极大全1矩阵数量
极大全1矩阵满足以下两个条件:
1.矩阵内元素全部由1构成
2.该矩阵不是其他全1矩阵的子矩阵
题解：枚举每一行，以该行作为矩阵的底，利用单调栈处理出该行上最大全1矩阵，并判断该矩阵有没有可能向下扩展

#include &lt;bits/stdc++.h&gt;
using namespace std;
typedef long l...]]></description><category></category></item><item><title><![CDATA[初学python爬虫，记录一下第一个程序]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476572</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476572</guid><author>aomen8092</author><pubDate>Fri, 09 Aug 2019 11:14:00 +0800</pubDate><description><![CDATA[这个程序是实现对NITOJ题面信息的简单爬取
因为有些题目的题面，input，output的描述是用&lt;p&gt;标签，有些用&lt;div&gt;标签，有些不用标签，直接写在大的&lt;div&gt;下的，而这程序只识别&lt;p&gt;标签下的文本，所以就有了那个奇怪的话=。=（对不起，请换一个题）。
因为初学，所以程序比较残疾
因为是第一次实现，所以想记录一下
路过大佬...]]></description><category></category></item><item><title><![CDATA[贪心+二分  O(nlogn)求LIS（最长上升子序列）并记录路径]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476566</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476566</guid><author>aomen8092</author><pubDate>Wed, 07 Aug 2019 21:08:00 +0800</pubDate><description><![CDATA[如果用dp求LIS的话，记录路径是比较简单的，只要在更新dp数组的时候同时记录路径，最后找LIS长度的时候同时找到终点，通过终点逆向就能找到LIS路径了（这是我临时想的，可能有更好的方法，不保证正确性）

for (int i = 1; i &lt;= n; i++)
    for (int j = 1; j &lt; i; j++)
        if (a[j] &lt;...]]></description><category></category></item><item><title><![CDATA[2019HDU多校第六场 HDU6635 Nonsense Time]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476564</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476564</guid><author>aomen8092</author><pubDate>Wed, 07 Aug 2019 20:09:00 +0800</pubDate><description><![CDATA[题意：给你一个n的排列p，再给你一个n的排列k，一开始所有p不可用，对于每个ki表示下标为k1~ki的p可用，求当前可用的所有p的最长上升子序列（可能表达的不是很清楚，这里看题面）
题解：题意等价于一个完整的排列按照一定顺序依次删除每个数，然后计算每次操作后的 LIS 长度。这样就好办了，首先在 O(nlogn) 的时间内求出 LIS，并记录一个 LIS(不会记录路径看这里)，当删除 ...]]></description><category></category></item><item><title><![CDATA[C语言中rand()函数及time库相关]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476569</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476569</guid><author>aomen8092</author><pubDate>Tue, 06 Aug 2019 18:39:00 +0800</pubDate><description><![CDATA[rand()函数
rand() 函数原型是int rand(void)，它会返回一个从0到RAND_MAX的整数（RAND_MAX是C 语言标准库 &lt;stdlib.h&gt; 中定义的一个宏 0x7fff 即32767）
但是仅仅用rand()返回的结果是不变的，因为rand()函数是根据一个数（我们称之为种子）通过固定的公式计算而来的，但是计算机开机后，这个种子的值是定了的...]]></description><category></category></item><item><title><![CDATA[python3列表操作]]></title><link>https://blog.youkuaiyun.com/aomen8092/article/details/101476567</link><guid>https://blog.youkuaiyun.com/aomen8092/article/details/101476567</guid><author>aomen8092</author><pubDate>Tue, 06 Aug 2019 10:23:00 +0800</pubDate><description><![CDATA[列表是最常用的Python数据类型，它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型。
创建列表
创建一个列表，只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示：

&gt;&gt;&gt; list1 = ['Zeronera', 'Python3', 2019, 3.14]
&gt;&gt;&gt; list2 = [1, 2, 3, [4...]]></description><category></category></item></channel></rss>