KMP_next数组应用_最小循环元
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83785624 循环元: 如果一个字符串S是由字符串T重复k次构成, 则称T是S的循环元, 长度最小的T称为S的最小循环元, 此时k最大 结论1: 字符串S[0...n - 1]有长度为len的循环元的充要条件是len整除n且S[0...n - 1 - len] = S[len...n - 1]. (该结论较易证明, 此处不再赘述证明过程) 结论2
KMP_next数组应用_最小循环元_POJ1961_Period
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83819314 点此打开题目页面 思路分析: 在本人之前的博文中详细讨论过字符串循环元与next数组的关系, 直接应用相关结论即可, 下面给出AC代码:
//POJ1961_Period
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX = 1e6 +
KMP_字符串最小表示_CH1802_Necklace
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83824853 点此打开题目页面 思路分析: 方法一: 直接使用字符串Hash和二分搜索判断两个字符串字典序大小关系, 容易给出时间复杂度为O(nlg(n))的解决方案, n为输入字符串的长度, 具体实现见如下AC代码:
//CH1802_Necklace
#include <cstdio>
#include <cstring>
using na
Hash_CH1806_Matrix
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83830305 点此打开题目页面 思路分析: 设输入的M行N列矩阵为C, A行B列矩阵为D, 对于C的所有A行B列子矩阵hash其对应的所有元素之和的低64位对99991取模的值加上其第一行对应的hash值. 对于D, 计算其每行对应的字符串hash值. 在比对C的某个A行B列子矩阵和D时只需比较这A行的字符串hash值即可. 下面给出AC代码:
KMP_next数组应用_循环元_POJ2185_Milking Grid
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83860313 点此打开题目页面 思路分析: 设给定图形可由AB子矩形重复而成, 稍一想便知, 给定图形必定可由其最左上角的AB子矩形重复而成. 因此只需找到所有行(长度C)同时满足S[1...k] = S[C - k + 1...C]的最大的k和所有列(长度为R)同时满足T[1...m] = T[R - m + 1...R]的最大的m, 即为最小
Hash_字符串hash_二分_倍增_CH1809
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83862108 点此打开题目页面 思路分析: 字符串hash配合二分或倍增均可, 下面先给出配合二分的AC代码, 然后给出配合倍增的AC代码:
//CH1809_匹配统计
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX = 2e5 + 5, P =
Trie树_CH1601_前缀统计
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83862304 点此打开题目页面 思路分析: 直接应用Trie树即可, 下面给出AC代码:
//CH1601_前缀统计
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX = 1e6 + 5;
int trie[MA
Trie树_CH1602_The XOR Largest Pair
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83864338 点此打开题目页面 思路分析: 易知, 题目等价于计算i, j, 其中i, j满足1 =< i < j <= N且异或最大, 对于任意的2 <= x <= N, 考虑计算使得1 <= y < x且异或最大的异或的值, 可将插入一个只含有字符'0'和'1'的Tire树T中, 其中每个对应一个31位的二进串, 最高位对应字符串起始字符.
Trie树_POJ3764_The xor-longest Path
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83865344 点此打开题目页面 思路分析: 根据异或运算满足结合律和交换律, 且x XOR x = 0, x XOR 0 = x. 考虑选定题目中给定树的一点为树根r, 计算所有点到r的异或路径值, 设点i到根r的异或路径值为a, 点j到点根r的异或路径值为b, 那么点i到点j的异或路径值为a XOR b. 至此, 题目转换为计算若干个数两两异或
Trie树_POJ3630_Phone List
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83867351 点此打开题目页面 思路分析: 将输入字符串按照长度非递减排序, 然后直接应用Trie树即可, 具体见如下AC代码:
//POJ3630_Phone List
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using nam
二叉堆_贪心_POJ1456_Supermarket
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83890185 点此打开题目页面 思路分析: 将所有商品按照保质期非递减排序得序列A[1...n], 设H为初始为空的最小堆. 执行下述伪代码所述贪心过程:
for i = 1 to n
if A[i]的保质期 > H.size
H.push(A[i]的利润)
else
if A[i].利润 > H.top()
H.pop(),
高精度计算_大整数_加_减_乘_除_大整数_基于vector_高效计算_模板
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83239134 本文给出的是, 相对偏重于计算效率的大整数运算模板, 代码数量整体多余前面介绍的基于deque的大整数计算模板, 当然如果仅需要大整数与int型运算, 那么请参考本人有关大整数和int型计算的博客. 为何称本文给出的高效计算的模板, 原因可概括为两点, 第一: 使用相比deque执行效率更高的vector(前提是在指定操作下), 第
高精度计算_大整数_加_减_乘_除_int型_模板_基于deque
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83239321 下面给出的是大整数加, 减, 乘, 除int型的模板: 约定: 下面的模板实现中a, b均为HEX进制数, 且a[0]为a的最高位
const int HEX = 1e9;//运算采取的进制
deque<int> operator + (const deque<int> &a, const int b){//a,b均为HEX进制
递归_算法分析_指导性介绍
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83272234 递归算法也即自身调用自身的算法, 通常调用自身是为求解规模更小的子问题, 但是每次递归调用编译器都要为之分配独立的内存空间(主要是栈空间). 通常如果能用循环求解, 那么不应使用递归, 因为递归在执行效率方面往往低于循环, 但是递归和循环均为一种强大的程序设计工具, 本人认为, 学算法(包括刷题)的终极目的就是为了强化自己设计和分析
ASP.NET 4.0配置文件中的ClientIDMode属性
ASP.NET4.0配置文件中的ClientIDMode属性来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=99时光流逝,我们心爱的ASP.NET也步入了4.0的时代,微软在ASP.NET4.0中对很多特性做了修改。比如我将要讨论的控件ID机制就是其中之一。在ASP.NET4.0之前我们总是要为控件的ClientID头疼,比如明明一个叫lblNam
递归_CH0301_递归实现指数型枚举_递归算法正确性证明范例
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83273327 点此打开题目页面 简而言之本题要求打印集{1, 2,..., n}的所有子集(打印时每个子集中的所有元素位于同一行, 每行中的元素递增打印, 空集对应空行) 先给出如下AC代码, 然后给出其正确性的形式化证明
//CH0301_递归实现指数型枚举
#include <iostream>
#include <cstdio>
#inc
递归_CH0302_递归实现组合型枚举_递归算法正确性证明范例
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83276758 点此打开题目页面 先给出AC代码, 然后给出程序正确性的形式化证明
//CH0302_递归实现组合型枚举
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n, m;
vector<int> choosn;
void s
递归_CH0303_递归实现排列型枚举_递归算法正确性证明范例
版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83277443 点此打开题目页面 先给出AC代码, 然后给出程序正确性的形式化证明.
//CH0303_递归实现排列型枚举
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int MAX = 1e2;
int n;
vector<
.svn文件太大解决办法
svn下载代码后一段时间.svn文件会很大,包含了各种备份文件,但是如果直接删除.svn文件里的内容的话再执行svn命令又会报错,所以我们可以采用tortoiseSVN自带的cleanup为文件夹瘦身 操作步骤:右键svn文件夹 ---> clean up ... ---> 勾选清理工作副本的状态(clean up working copy status) 以及清理原始副本(Vacuum pristine copies) ---> 确定 等一会儿就能完成瘦身了。
谨慎使用多线程中的fork
前言 在单核时代,大家所编写的程序都是单进程/单线程程序。随着计算机硬件技术的发展,进入了多核时代后,为了降低响应时间,重复充分利用多核cpu的资源,使用多进程编程的手段逐渐被人们接受和掌握。然而因为创建一个进程代价比较大,多线程编程的手段也就逐渐被人们认可和喜爱了。 记得在我刚刚学习线程进程的时候就想,为什么很少见人把多进程和多线程结合起来使用呢,把二者结合起来不是更好吗?现在想想当初真是too young too simple,后文就主要讨论一下这个问题。 进程与线程模型 进程的经典定义就
今日推荐
周排行