上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 26 下一页
摘要: Elven PostmanTime Limit: 1500/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 0Accepted Submission(s): 0Problem D... 阅读全文
posted @ 2015-09-13 14:36 陈瑞宇 阅读(257) 评论(0) 推荐(0) 编辑
摘要: TravelTime Limit: 1500/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 46Accepted Submission(s): 20Problem Descri... 阅读全文
posted @ 2015-09-13 14:24 陈瑞宇 阅读(211) 评论(0) 推荐(0) 编辑
摘要: PondsTime Limit: 1500/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 0Accepted Submission(s): 0Problem Descripti... 阅读全文
posted @ 2015-09-13 14:15 陈瑞宇 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 直接O(n*m)的dp也可以直接跑过。因为上最多跑到m就终止了,因为前缀sum[i]取余数,i = 0,1,2,3...,m,有m+1个余数,m的余数只有m种必然有两个相同。#includeusing namespace std;const int maxn = 1e3+5;int cnt[maxn... 阅读全文
posted @ 2015-09-11 09:35 陈瑞宇 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 因为所有整数都能被唯一分解,p1^a1*p2^a2*...*pi^ai,而一次询问的数可以分解为p1^a1k*p2^a2k*...*pi^aik,这次询问会把所有a1>=a1k && a2 >= a2k &&...a3 >= a3k的数从原来的集合中分开。ai表示pi的幂。那么只有当这个数的素因子的... 阅读全文
posted @ 2015-09-11 03:57 陈瑞宇 阅读(213) 评论(3) 推荐(0) 编辑
摘要: 用把失配边也加到正常边以后AC自动机,状态是长度递减的DAG,每次选一个不会匹配字符的转移。dp[u][L]表示当前在tire树上u结点长度还剩L时候不匹配的概率,根据全概率公式跑记忆化搜索。#includeusing namespace std;typedef double ld;const in... 阅读全文
posted @ 2015-09-10 16:47 陈瑞宇 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 二维的矩阵匹配,把模式矩阵按列拆开构造AC自动机,记录行号(为了缩点判断)。把T矩阵按行匹配,一旦匹配成功,在假想的子矩阵左上角位置加一。最后统计总数。因为所有模式串长度一样,不用维护last数组。模式串可能有重复,结点要用vector来存。HASH出奇迹,快得不行。。。#includeusing ... 阅读全文
posted @ 2015-09-10 16:35 陈瑞宇 阅读(292) 评论(0) 推荐(0) 编辑
摘要: AC自动机的裸题。学了kmp和Trie以后不难看懂。有一些变化,比如0的定义和f的指向,和建立失配边,以及多了后缀连接数组last。没有试过把失配边直接当成普通边(一开始还是先这样写吧)。#includeusing namespace std;const int maxlen = 1e6+5, ma... 阅读全文
posted @ 2015-09-09 21:24 陈瑞宇 阅读(271) 评论(0) 推荐(0) 编辑
摘要: kmp的代码很短,但是不太容易理解,还是先说明一下这个算法过程吧。朴素的字符串匹配大家都懂,但是效率不高,原因在哪里?匹配过程没有充分利用已经匹配好的模版的信息,比如说,i是文本串当前字符的下标,j是要匹配的模版串当前正在匹配的字符的下标。(下标都从零开始,j同时可以表示已经匹配的字符长度)当匹配到... 阅读全文
posted @ 2015-09-09 15:57 陈瑞宇 阅读(301) 评论(1) 推荐(0) 编辑
摘要: 先两两比较,比较次数是两者相同的最长前缀长度*2+1,比较特殊的情况是两者完全相同时候比较次数是单词长度*2+2,两个单词'末尾\0'和'\0'比较一次,s尾部'\0'和循环内'\0'比较一次。因此,对于一个单词,只要知道和它某个相同的最长前缀的单词数就可以计算出方案数了。用tire,记录一颗子树上... 阅读全文
posted @ 2015-09-09 08:48 陈瑞宇 阅读(283) 评论(4) 推荐(0) 编辑
摘要: 状态是DAG,因此方案用dp统计,dp[i] = sum(dp[i+len(x)]),x是以i开头的前缀且是单词,关键在于快速判断一个前缀是不是单词,可用Trie。每一次转移的复杂度是O(maxlen),maxlen是单词的最长长度。#includeusing namespace std;const... 阅读全文
posted @ 2015-09-09 08:32 陈瑞宇 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 题意:求一个动态区间的最大连续和。静态版本的O(n)算法显示不适用了,但是可以用线段树分治,因为一个连续和要在两边的区间,要么跨越两边,对于一个结点维护最大前缀和,后缀和,子区间连续和。题目要求输出区间,所以还要保存连续和最大的区间,以及前缀和,后缀和的位置。为了维护最大前缀和以及后缀和还需要一个区... 阅读全文
posted @ 2015-09-08 18:05 陈瑞宇 阅读(453) 评论(0) 推荐(0) 编辑
摘要: 询问静态区间最值的Sparse—Table(Tarjan提出)的算法。这个算法的思想是一个dp,dp[i][j]表示i开头长度为2^j的区间内的最值,然后倍增转移。这道题询问的是出现次数,相同的数字是连续出现的,先把连续出现的数字按段编号,记录出现的次数。因为题目询问给的是原来的数字的下标,记录一下... 阅读全文
posted @ 2015-09-08 17:49 陈瑞宇 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 枚举中间的人,只要知道在这个人前面的技能值比他小的人数和后面技能值比他小的人数就能计算方案数了,技能值大的可有小的推出。因此可以利用树状数组,从左到右往树上插点,每个点询问sum(a[i]-1)就是前面的技能值比它小的人数,然后再从右边往左重复一遍就可以算出答案。#includeusing name... 阅读全文
posted @ 2015-09-08 17:17 陈瑞宇 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 简单题,题目要求显然是很多次插入,所以是链表。插入两个语句,nxt[i] = nxt[u] 表示 i结点指向u的后继, nxt[u] = i表示把u的后继设成i。设置一个头结点,指向一个不存在的结点,维护一下最后一个结点tail。#includeusing namespace std;const i... 阅读全文
posted @ 2015-09-07 23:19 陈瑞宇 阅读(150) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 26 下一页