acm
西红柿爱炒番茄
这个作者很懒,什么都没留下…
展开
-
求取约数的个数的算法
/*https://www.nowcoder.com/practice/04c8a5ea209d41798d23b59f053fa4d6?tpId=40&tqId=21334&tPage=1&rp=1&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking*/#include <bits/s...原创 2019-07-26 19:09:16 · 1017 阅读 · 0 评论 -
hdu1394 Minimum Inversion Number
Minimum Inversion NumberTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3796 Accepted Submission(s): 2309 Problem DescriptionThe inve...原创 2018-08-23 21:40:02 · 138 阅读 · 0 评论 -
详解后缀数组
1、前言 趁着这几天上午,把后缀数组大致看完了。这个东西本身的概念可能没太大理解问题,但是它所延伸出来的知识很复杂,很多,还有它的两个兄弟——后缀树,后缀自动机,编起来都不是盖的。 2、概念 前面曾经提到过AC自动机(http://www.cnblogs.com/jinkun113/p/4682853.html),讲得有点简略。。。它用以解决多模板匹配问题。但是前提是事先知道所...转载 2018-08-22 22:56:51 · 207 阅读 · 0 评论 -
判断是否能通过添加一个字母将字符串变为回文串
题目:给定一个字符串,问是否能通过添加一个字母将其变为回文串参考了一些同学的文章,发现判断是否能添加一个字符变成回文串是“最少添加几个字符变成回文串”的一种情况。在做测试时有三种情况:(1)aba型,本来就是回文串(2)abac型,在串的左边或右边添加另一侧的字符,变成回文串(3)abceba型,在串的中间添加字符,形成回文串。然而普通做法,前两种很好判断和处理,只有第三种...转载 2018-08-22 22:43:32 · 590 阅读 · 0 评论 -
最长回文子串(动态规划以及Manacher算法)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"自己的思路:求一个字符串的最长回文子串,我们可以将以每个字符为首的子串都遍历一遍,判断是否为回文,如果是回文,再判断最大长度的回文子串。算法简单,但是...原创 2018-08-22 21:34:43 · 200 阅读 · 0 评论 -
kmp求最小循环节及其原理解释
KMP最小循环节、循环周期:定理:假设S的长度为len,则S存在最小循环节,循环节的长度L为len-next[len],子串为S[0…len-next[len]-1]。(1)如果len可以被len - next[len]整除,则表明字符串S可以完全由循环节循环组成,循环周期T=len/L。(2)如果不能,说明还需要再添加几个字母才能补全。需要补的个数是循环个数L-len%L=L-(le...转载 2018-08-20 00:19:16 · 2277 阅读 · 1 评论 -
AC自动机算法详解 (转载)
首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。KMP算法是单模式串的字符匹配算法,AC自动机是多模式串的字符匹配算法。AC自动...转载 2018-08-08 11:03:56 · 636 阅读 · 0 评论 -
差分与前缀和——一种技巧
前缀和的概念相信很多人都知道.就是一个数组,要快速静态查询区间和,我们只要处理一个数组时A[i]=a[1]+a[2]+...+a[i].那么查询区间[l,r]的时候只要输出A[r]-A[l-1].那么这是时候预处理是O(n)的,查询一次是O(1).在很多情况下这种算法都是可行的,但是必须满足区间减法的性质.代码预处理如下: for (int i=1;i<=...转载 2018-07-22 23:33:45 · 2006 阅读 · 0 评论 -
【经典算法】——KMP,深入讲解next数组的求解
KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言来把这个算法的一些细节梳理清楚,也算是考验一下自己有真正理解这个算法。 什么是KMP算法:...转载 2018-07-27 12:59:44 · 319 阅读 · 0 评论 -
离散化-线段树-扫描线小结
一:首先是离散化,定义就不说了(其实不知道2333),我笼统地理解就是把大的数据范围缩小,同时又保证数据之间地关系不变,比如说坐标的大小,如果给你一些点,你需要的属性只是点与点之间的距离(与各个点的具体坐标值无关),那么我们可以把点的坐标映射到一个比较小的范围,然后把原来的属性放到新的坐标上就好,一个最简单的例子:对于点(-1e8,0),(1e8,0)之间的距离,如果要求的是两个点之间的水平距离,...原创 2018-08-24 21:47:30 · 253 阅读 · 0 评论 -
priority_queue用法总结
1、头文件#include<queue> 2、定义 priority_queue<int> p; 3、优先输出大数据priority_queue<Type, Container, Functional>Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。如果不写后两个参数,那么...原创 2018-08-29 23:39:39 · 10814 阅读 · 1 评论 -
POJ 3734 Blocks(矩阵优化+DP)
题目链接:点击打开链接题意:个n个方块涂色, 只能涂红黄蓝绿四种颜色,求最终红色和绿色都为偶数的方案数。该题我们可以想到一个递推式 。 设a[i]表示到第i个方块为止红绿是偶数的方案数, b[i]为红绿恰有一个是偶数的方案数, c[i]表示红绿都是奇数的方案数。那么有如下递推可能:递推a[i+1]:1.到第i个为止都是偶数,且第i+1个染成蓝或黄;2.到第i个为止红绿恰有一个是...原创 2018-09-07 23:34:41 · 193 阅读 · 0 评论 -
并查集的两个优化(秩优化+路径压缩)
路径压缩寻找祖先时采用递归,但是一旦元素一多起来,或退化成一条链,每次GetFather都将会使用O(n)的复杂度,这显然不是我们想要的。对此,我们必须要进行路径压缩,即我们找到最久远的祖先时“顺便”把它的子孙直接连接到它上面。这就是路径压缩了。使用路径压缩的代码如下,时间复杂度基本可以认为是常数的。路径压缩可以采用迭代和递归方式递归方式实现简单但是有些题目会爆栈的。//递归形式的路径...原创 2019-07-21 19:48:08 · 436 阅读 · 0 评论 -
非常好的动态规划总结,DP总结(转)
转自:https://blog.csdn.net/mmc2015/article/details/73558346转载 2019-02-13 21:14:50 · 423 阅读 · 0 评论 -
Minimum Inversion Number
Minimum Inversion NumberTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18395 Accepted Submission(s): 11168 Problem DescriptionThe in...原创 2018-09-15 08:37:34 · 166 阅读 · 0 评论 -
51nod 1571 最近等对
51nod 1571 最近等对题面现在有一个序列 a1, a2, ..., an ,还有m个查询 lj, rj (1 ≤ lj ≤ rj ≤ n) 。对于每一个查询,请找出距离最近的两个元素 ax 和 ay (x ≠ y) ,并且满足以下条件:· lj ≤ x, y ≤ rj;· ax = ay。两个数字的距离是他们下标之差的绝对值 |x − y| 。Input单组测试数据。...原创 2018-09-14 13:27:46 · 256 阅读 · 0 评论 -
ACM中常用算法----字符串集合
链接: https://blog.csdn.net/ck_boss/article/details/47066727原创 2018-09-15 20:30:09 · 234 阅读 · 0 评论 -
主席树详解
主席树抛出问题给定NN个数(intint范围内),一共MM次询问,每次都要询问区间[l,r][l,r]的第kk大的数。 其中N,M,l,rN,M,l,r均不超过2×1052×105,保证询问有答案。解决问题暴力法显而易见,最暴力的办法就是区间排序然后输出排序后第kk个数。最坏情况的时间复杂度是O(nmlgn)O(nmlgn),不超时才怪。主席树(可持久化线段树)法于是...转载 2018-09-03 22:16:13 · 360 阅读 · 0 评论 -
poj 3667 Hotel 区间合并
思路:昨天开始学习线段树的区间合并问题,看这个题时,没一点思路,网上搜各种博客,发现大部分都是贴代码,思路说的很少,以至于我昨天下午到晚上还没把题和线段树联系起来,弱爆了……= = ,今天lky给发了个好点的讲解博客,终于看懂了,写代码时,一个低级错误折磨了我一天,找了一天的错……唉,各种弱……详细说下这题过程吧。一:存线段树数据的数组至少要有四个变量,也可六个(以六个为例)。 tre...原创 2018-09-05 18:04:23 · 146 阅读 · 0 评论 -
主席树:POJ2104 K-th Number
题目大意:给出一段数列,让你求[L,R]区间内第几大的数字!在这里先介绍一下主席树! 如果想了解什么是主席树,就先要知道线段树,主席树就是n棵线段树,因为线段树只能维护最大值或者最小值,要想求出第二大的数字怎么办呢?两颗线段树呗!好,那么第n大呢,就可以构造n棵线段树,这样的内存是显然会爆掉的,那么怎么办呢?因为每一次更新都是更新的是从叶子节点到根节点的一条路,路的长度大约是lognlogn...原创 2018-09-05 16:44:10 · 180 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第二场)I:car
链接:https://www.nowcoder.com/acm/contest/140/I来源:牛客网 题目描述White Cloud has a square of n*n from (1,1) to (n,n).White Rabbit wants to put in several cars. Each car will start moving at the same tim...原创 2018-07-21 22:58:53 · 258 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第二场)D:money
链接:https://www.nowcoder.com/acm/contest/140/D来源:牛客网 题目描述White Cloud has built n stores numbered from 1 to n.White Rabbit wants to visit these stores in the order from 1 to n.The store numbered...原创 2018-07-21 17:17:57 · 257 阅读 · 0 评论 -
【知识点】大数分解与素数判定 --- 【Miller-rabin算法】【pollard-rho算法】
1.Miller-rabin算法:Miller-rabin算法是一个用来快速判断一个正整数是否为素数的算法。根据费马小定理,如果p是素数,则a^(p-1)≡1(mod p)对所有的a∈[1,n-1]成立。所以如果在[1,n-1]中随机取出一个a,发现不满足费马小定理,则证明n必为合数。【但是每次尝试过程中还做了一个优化操作,以提高用少量的a检测出p不是素数的概率。这个优化叫做二次探测。它是根据这个...转载 2018-07-15 22:35:47 · 451 阅读 · 0 评论 -
ACM训练联盟周赛C: Alice和Bob的Nim游戏
题目描述众所周知,Alice和Bob非常喜欢博弈,而且Alice永远是先手,Bob永远是后手。Alice和Bob面前有3堆石子,Alice和Bob每次轮流拿某堆石子中的若干个石子(不可以是0个),拿到所有石子中最后一个石子的人获胜。这是一个只有3堆石子的Nim游戏。Bob错误的认为,三堆石子的Nim游戏只需要少的两堆的石子数量加起来等于多的那一堆,后手就一定会胜利。所以,Bob把三堆石...原创 2018-07-17 23:54:31 · 212 阅读 · 0 评论 -
尺取(转)
转载自http://blog.chinaunix.net/uid-24922718-id-4848418.html有这么一类问题,需要在给的一组数据中找到不大于某一个上限的“最优连续子序列”于是就有了这样一种方法,找这个子序列的过程很像毛毛虫爬行方式比较流行的叫法是“尺取法”。 Poj3061给长度为n的数组和一个整数m,求总和不小于m的连续子序列的最小长度输入n...转载 2018-07-23 12:43:56 · 123 阅读 · 0 评论 -
C++整行输入的实现方法(scanf,gets,getline, cin.getlien)
C++行输入的实现方法:方法一:scanf()读入char[]使用方法:char str[1024];scanf("%[^\n]",&str);getchar();说明:在scanf函数中,可以使用%c来读取一个字符,使用%s读取一个字符串, 但是读取字符串时不忽略空格,读字符串时忽略开始的空格,并且读到空格为止,因此只能读取一个单词,而不是整行字符串。 其实s...转载 2018-07-04 20:03:17 · 14436 阅读 · 0 评论 -
Benelux Algorithm Programming Contest 2014 Final I: Interesting Integers
I. Interesting Integers:Undoubtedly you know of the Fibonacci numbers. Starting with F_1 = 1F1=1 and F_2 = 1F2=1,every next number is the sum of the two previous ones. This results in the sequence 1...原创 2018-07-11 13:23:34 · 179 阅读 · 0 评论 -
ACM在线模板(收藏贴)
转自大佬f-zyj:https://blog.csdn.net/f_zyj/article/details/51594851原创 2018-07-10 23:37:43 · 544 阅读 · 2 评论 -
深入浅出矩阵快速幂及其简单应用
矩阵快速幂的基础是乘法快速幂,乘法快速幂可以看完全理解乘法快速幂及其两种写法的解析,只不过an=?an=?换成了 An=?,A=⎡⎣⎢⎢⎢⎢a11a21⋮am1a12…⋮am2……⋮…a1na1n⋮amn⎤⎦⎥⎥⎥⎥An=?,A=[a11a12…a1na21……a1n⋮⋮⋮⋮am1am2…amn] 我们可以写一个矩阵类Matrix,然后在类中重载*运算符,+运算符,然后把乘法快速幂中的...转载 2018-07-16 12:41:11 · 874 阅读 · 1 评论 -
完全理解乘法快速幂及其两种写法的解析
an=?0≤n≤10105an=?0≤n≤10105没错,乘法快速幂就是解决上述问题的。乘法快速幂的思想可以看到,要求一个数的aa的nn次幂,而且这个nn非常大,如果利用循环来处理,O(n)O(n)的时间复杂度对于计算机的处理速度来说是远远不够的;循环既然不能满足要求,那我们能不能加速一下这个循环呢,比如O(n)→O(logn)O(n)→O(logn)的优化呢?循环的做法是把这个式子展开:an=a...转载 2018-07-16 12:22:06 · 320 阅读 · 0 评论 -
BAPC 2014 Preliminary B: Failing Components
BAPC 2014 PreliminaryB Failing ComponentsAs a jury member of the Best Architectural Planning Contest, you are tasked with scoring the reliability of a system. All systems entered in the contest consis...原创 2018-07-09 13:51:47 · 202 阅读 · 0 评论 -
2018年湘潭大学程序设计竞赛 G又见斐波那契
链接:https://www.nowcoder.com/acm/contest/105/G来源:牛客网 题目描述这是一个加强版的斐波那契数列。给定递推式求F(n)的值,由于这个值可能太大,请对109+7取模。输入描述:第一行是一个整数T(1 ≤ T ≤ 1000),表示样例的个数。以后每个样例一行,是一个整数n(1 ≤ n ≤ 1018)。输出描述:...原创 2018-07-18 00:51:52 · 170 阅读 · 0 评论 -
memset()函数用法和易错总结
函数介绍编辑void *memset(void *s, int ch, size_t n);函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 [1] 。常见错误编辑第一:memset函数按字节对内存块进行初始化,所以...原创 2018-07-12 19:37:37 · 518 阅读 · 0 评论 -
Benelux Algorithm Programming Contest 2014 Final J: Jury Jeopardy
J: Jury Jeopardy:What would a programming contest be without a problem featuring an ASCII-maze? Do not despair: one of the judges has designed such a problem.The problem is about a maze that has exact...原创 2018-07-12 20:16:59 · 190 阅读 · 0 评论 -
2018年湘潭大学程序设计竞赛—— 吃货
题目描述 作为一个标准的吃货,mostshy又打算去联建商业街觅食了。混迹于商业街已久,mostshy已经知道了商业街的所有美食与其价格,而且他给每种美食都赋予了一个美味度,美味度越高表示他越喜爱这种美食。mostshy想知道,假如带t元去商业街,只能吃一种食物,能够品味到的美食的美味度最高是多少?输入描述:第一行是一个整数T(1 ≤ T ≤ 10),表示样例的个数。以后每个样例第一行是两个整数...原创 2018-07-15 16:35:01 · 502 阅读 · 0 评论 -
cin与scanf cout与printf效率问题
在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中很不错,...转载 2018-07-15 13:40:07 · 488 阅读 · 0 评论 -
加强版斐波那契数列(矩阵快速幂)
关于快速幂的讲解可以参见我的上一篇博客《快速幂》题目链接:又见斐波那契题目描述 这是一个加强版的斐波那契数列。给定递推式求F(n)的值,由于这个值可能太大,请对109+7取模。输入描述:第一行是一个整数T(1 ≤ T ≤ 1000),表示样例的个数。以后每个样例一行,是一个整数n(1 ≤ n ≤ 1018)。输出描述:每个样例输出一行,一个整数,表示F(n) mod 1000000007。示例...转载 2018-07-13 23:34:43 · 691 阅读 · 0 评论 -
总结——01背包问题 (动态规划算法)
0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 分析一波,面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。 解决办法:声明一个 大小为 m[n][c] 的二维数组,m[ i ][ j ] 表示 在面对第...转载 2018-07-18 23:10:08 · 218 阅读 · 0 评论 -
大数的四则运算(加法、减法、乘法、除法)
大数的四则运算(加法、减法、乘法、除法):前言: 在计算机中数字表示的范围是有限制的,比如我们熟知的 int、float、double 等数据类型所能表示的范围都是有限的,如果我们要对位数达到几十位、几百位、上千位的大整数进行计算,这些数据类型显然不能满足我们的要求,因此我们需要通过算法来实现这些功能。 1、大数加法 两个大数我们可以用数组来保存,然后在数组中逐位进行相加,再判断该位相...转载 2018-07-13 09:36:32 · 299 阅读 · 0 评论 -
错排公式
问题: 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题。递推过程:当n个编号元素放在n个编号位置,元素编号与位置编号...原创 2018-07-12 23:37:12 · 191 阅读 · 0 评论