自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Gatevin的专栏

Another blog address: gatevin.moe

  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 Codeforces 387C George and Number 暴力

题目大意:就是给处一个长度不超过10^5的十进制正整数, 是按照题目所给的方法从一个数组中拼出来的为初始的那个数组最多有多少个元素大致思路:就是一个很简单的暴力枚举, 每次后面截下的一段数尽量小即可代码如下:Result  :  Accepted     Memory  :  100 KB     Time  :  31 ms/* * Author:

2015-02-26 23:09:35 808

原创 Codeforces 386C Diverse Substrings 计数问题

题目大意:就是给定一个长度不超过3*10^5的字符串, 含有的字符都是小写字母(‘a' ~ 'z'), 定义字符串的多样性d(s)为字符串中含有的不同字母的个数, 比如d("aaa") = 1, d("abbbc") = 3对于给出的字符串求其所有子串中对应的d值为k的串的数量(子串只要起始位置或者终点位置不同就视作不同子串) (k从1到给出的串的d值, 对于这所有的k都要求出其数量)

2015-02-26 22:35:32 892

原创 Codeforces 390C Inna and Candy Boxes RMQ简单变化 或 前缀和dp一下

题目大意:就是对于给定的n, w, k (1 注意每次询问之后原来输入的串不改变大致思路:由于是静态的信息查询, 不需要使用线段树, 这里我用的是和RMQ类似的预处理的一个DP的方法做的...状态转移什么的都写在代码注释里了, 看到有很多人用的前缀和什么的做法..看来我还是想的复杂了一点....代码如下:Result  :  Accepted     Mem

2015-02-26 21:37:58 680

原创 Codeforces 513C Second price auction 数学公式求期望

题目大意:就是n个公司(n 大致思路:纯数学推理做的...有点厉害的样子...数学公式见代码注释代码如下:Result  :  Accepted     Memory  :  4 KB     Time  :  15 ms/* * Author: Gatevin * Created Time: 2015/2/26 10:22:50 * File

2015-02-26 11:04:55 815

原创 Codeforces 513B2 or 513B1 Permutations 策略题

题目链接:B1难度 http://codeforces.com/contest/513/problem/B1 (n B2难度 http://codeforces.com/contest/513/problem/B2 (n 题目大意:对于一个排列p个定了函数f(p)的定义, 为所有的1 现在对于n个数的排列, 输出在满足f(p)最大的排列中字典序从小到大排在第m个的排列例如n

2015-02-25 23:17:58 1224

原创 Codeforces 513G1 or 513G2 Inversions problem DP

题目大意:就是现在初始给定一个n个数的排列, 每次随机地选取任意的一个段的数进行反转, 问k次随机翻转之后逆序对的数量的期望G1难度题目链接:http://codeforces.com/contest/513/problem/G1 (n G2难度题目链接:http://codeforces.com/contest/513/problem/G2 (n 大致思路:还是过不了

2015-02-25 22:59:02 775

原创 Codeforces 514C Watto and Mechanism Trie树 + dfs

题目大意:现在需要找的字符串S的T的关系为两者长度相同且刚好有1处字符不同就是对于给定的n个字符串(n 大致思路:就是将n个字符串插入Trie树暴搜一下就过了....给出一点可能错的样例吧:Input:3 2abcbbabOutput:NOYESYES代码如下:Result  :  Accepted

2015-02-25 22:44:27 931

原创 Codeforces 514D R2D2 and Droid Army RMQ问题

题目大意:就是现在对于一个m行n列的矩阵, 每次可以选择m行中的任意一行的正整数-1,最多选择k次, 如果某一列中的m个数全部成为了0, 那么这一列算作被破坏, 求被破坏的连续的列 最长是多少列, 并且输出选择各行的次数 (m 大致思路:就是RMQ预处理一下每一行的所有数, 然后二分能够找到的长度判断是否可行即可, 很简单的RMQ问题代码如下:Result  :

2015-02-25 22:34:21 935

原创 Codeforces 514E Darth Vader and Tree DP + 矩阵快速幂

题目大意:给定n和x, (n 大致思路:思路写在代码注释里了代码如下:Result  :  Accepted     Memory  :  852 KB     Time  :  1045 ms/* * Author: Gatevin * Created Time: 2015/2/25 11:49:15 * File Name: poi~.cpp

2015-02-25 22:27:37 745

原创 Codeforces 421D Giving Awards 策略题

题目大意:就是现在要求一个长度为n的排列, 使得这个排列中不出现给定的m组相邻位置情况, 输出任意一组解大致思路:策略题...YY能力还是不够...策略见代码注释吧代码如下:Result  :  Accepted     Memory  :  5408 KB     Time  :  93 ms/* * Author: Gatevin * Creat

2015-02-24 18:32:39 708

原创 Codeforces 441E Valera and Number 概率DP

题目大意:现在有如下的伪代码://input: integers x, k, pa = x;for(step = 1; step <= k; step = step + 1){ rnd = [random integer from 1 to 100]; if(rnd <= p) a = a * 2; else a = a + 1;

2015-02-24 16:31:40 1494

原创 UVALive 2775 (LA 2775) Hidden Password 后缀数组

题目大意:对于一个字符串定义其 one-letter left cyclic shifts 为将其前 i (0 比如“abcde”这个串根据这个定义得到的就是abcdebcdeacdeaddeabceabcd一共5行, 第 i 行是将前i个字符搬到后面得到的字符串, i 从0开始计数现在对于给出的字符串S长度为L (5 大致思路:很容易想到后缀数

2015-02-15 16:08:32 711

原创 UVALive 3907 (LA 3907) Puzzle AC自动机 + 搜索DP 记录路径

题目大意:给定s个字符串(1 大致思路:首先利用AC自动机插入这s个串建立状态转移图, 然后再得到的有向图中搜索, 从根节点开始, 如果存在不经过禁止点的环, 那么输出No, 否则这个图不考虑禁止点是一个DAG, 选取跟节点AC自动机起点之后找最长路径, dfs即可, 可以用记忆化搜索加快对最长长度的搜索, 每次从当前点向之后转移的时候, 优先选字典序最大的字符边保证结果长度最

2015-02-15 15:16:15 741

原创 CodeForces 128D Numbers 贪心 或 YY

题目大意:就是给你n个正整数数(3 大致思路:我的思路就是YY的..方法见代码注释另外有个贪心的做法:排序后每次去一个数, 如果这个数num有剩余的num - 1存在就接上num - 1, 否则接上num + 1, 最后判是否首尾连接即可我的做法当时YY出来的, 后来和贪心比较了一下发现性质有明显的相似之处代码如下:Result  :  Accept

2015-02-14 20:52:33 725

原创 CodeForces 128C Games with Rectangle 组合数学

题目大意:就是现在一个n*m的矩形当中塞K个小矩形(一层一层的) 个矩形都是包含关系且不相交问有多少种不同方案大致思路:首先对于给出的n*m的矩形有(n - 1)*(m - 1)的顶点阵列现在对于要选出的K个包含关系的矩形可以想到考虑每个K矩形的左上角和右下角, 一组左上和右下的点确定一个矩形而对于K个左上角和K个左下角, 共2*K个点的横坐标都不相同, 纵坐标也是

2015-02-14 20:35:53 777

原创 CodeForces 128A Statues 简单搜索

题目大意:现在M从左下角走到右上角时间 t 时刻可以向周围8个方向没有S的走或者保持原位, 到t + 1是所有S下落一位, 走的途中不能被S重合问能否走到右上角大致思路:很简单的搜索了, dfs或bfs都可以, 没什么难度我写的dfs...代码如下:Result  :  Accepted     Memory  :  12 KB     Time  

2015-02-14 20:25:49 1071

原创 CodeForces 128B String 后缀数组 或 优先队列维护 求第K小子串

题目大意:给出一个长度不超过10^5的字符串求其所有子串当中字典序排行第K(K 此题对于多个子串相同的视为不同子串,即起点不同也视为不同大致思路:刚开始想的是后缀数组的解法, 首先对于这个字符串求后缀数组之后, 利用得到的sa数组的字典序, 因为这里的相同子串要多次计数, 所以对于后缀sa[i]和其他串的LCP也要多次计于是计数稍微有点麻烦, 需要对每次连续的公共前缀多

2015-02-14 20:16:12 1926

原创 UVALive 4126 (LA 4126) Password Suspects AC自动机 + DP + 剪枝dfs

题目大意:白书练习题就是给了M(0 如果种数大致思路:首先吐槽一下看了网上某份题解半小时后发现他是错的....后来搞清楚了自己哪里错了...递归的时候出了输出所有结果的问题,因为记忆化使得部分结果没有被输出所有细节都记录在代码注释里了...大家看代码吧代码如下:Result  :  Accepted     Memory  :  ? KB

2015-02-13 21:12:36 998

原创 UVA 11488 Hyper Prefix Sets Trie树求最值

题目大意:白书练习题给定一个字符串集合S, 定义P(S)为所有字符串的公共前缀长度与S中字符串个数的乘积, 例如P{000, 001, 0011} = 6,现在给出n个只包含字符01的串(n 大致思路:这题比较巧妙, 刚开始是凭感觉写的, 结果一发AC了...后来证明了一下正确性我的想法就是对n个字符串插入Trie树的时候, 每插入一个节点, 就对当前节点的值加上其

2015-02-13 16:31:41 675

原创 UVA 10829 L-Gap Substrings 后缀数组

题目大意:现在定义如果一个字符串S可以被写成UVU的形式(U, V是两个非空字符串), 且V的长度是L, 那么串S是L-Gap串一个字符串可能既是L1-Gap串又是L2-Gap串, 现在给出一个字符串S(其长度不超过50000)给定整数G, 求给出的字符串的所有子串中G-Gap字符串的数量(如果多个子串相同但是出现位置不同视为不同子串)大致思路:刚开始我想的是枚举G-G

2015-02-13 15:52:03 1404 1

原创 UVALive 3490 (LA 3940) || ZOJ 2619 Generator AC自动机(或KMP) + 整数高斯消元 + 数学期望

题目大意:就是现在一个字符串生成器每次随机扔出前n(n 将产生的字符连接起来成为其生成的字符串,如果它产生的字符串中有连续的一段出现了给定的禁止串,则生成停止求停止时已经生成的字符串长度的期望大致思路:一开始果断用了AC自动机,后来发现KMP也就足够了这个题建立方程组之后用Gauss消元不能用double的,容易产生误差...(因为误差跪了好多发之后改成整数版)

2015-02-12 20:55:53 1351

原创 UVA 11732 "strcmp()" Anyone? Trie树 + 树的左儿子右兄弟存储法

题目大意:在C/C++的函数比较的STL中存在这样的字符串比较函数:int strcmp(char *s, char *t){ int i; for (i=0; s[i]==t[i]; i++) if (s[i]=='\0') return 0; return s[i] - t[i];}现在有N个给出的字符串(N

2015-02-12 17:12:02 913

原创 UVA 11019 Matrix Matcher AC自动机字符串矩阵匹配

题目大意:就是在给出的N*M(1 大致思路:白书例题= =不过这种统计出现位置的方法还真是巧妙....需要注意当把X*Y的矩阵拆解的时候可能出现多行是一样的情况细节见注释吧...代码如下:Result  :  Accepted     Memory  :  ? KB     Time  :  2469 ms/* * Author: Gatevin

2015-02-12 14:19:41 569

原创 UVALive 4513 (LA 4513) Stammering Aliens 后缀数组 或 hash

题目大意:白书例题给出一个整数m>=1和一个字符串(m 如果有多个子串满足条件输出出现位置最右的大致思路:首先很容易想到后缀数组的做法. 利用height数组分组, 很简单就不说了, 细节见代码另外白书上说可以用hash, 所以用这个题试了一下hash表示第一次用hash...然后就坑了有木有= =刚开始我取得是H函数中x = 2的情况来写这样可

2015-02-11 21:16:16 759

原创 UVALive 4670 (LA 4670) Dominating Patterns AC自动机

题目大意:白书例题对于给出的N个(1 如果有多个结果, 按照输入顺序输出大致思路:明摆着个AC自动机水题...首先对于所有pattern建立AC自动机然后扫描一遍language text string即可, 记录每个字符串出现的次数细节见代码吧代码如下:Result  :  Accepted     Memory  :  ? KB     Ti

2015-02-11 16:31:05 794

原创 UVALive 3026 (LA 3026) Period KMP求字符串周期

题目大意:白书例题给出一个长度不超过1000000的字符串S, 对于该字符串的所有前缀求其周期, 如果周期K >= 2输出起始位置是第几个字符和其周期K每一个Test case之后都要有一个空行大致思路:就是利用KMP的next数组的性质对于长度为n的字符串如果n % (n - next[n]) == 0则是周期串, 周期的部分长度为n - next[n], 周期数为

2015-02-11 16:02:43 1409

原创 UVALive 3942 (LA 3492) Remember the Word Trie树 + 记忆化搜索

题目大意:白书例题给出由S个不同单词组成的字典和一个长字符串. 把这个字符串分解成若干个单词的连接, 单词可以重复使用, 问有多少种分解方法单词个数1 大致思路:首先将S个单词插入Trie树, 然后利用递推的思想记忆化搜索即可代码如下:Result  :  Accepted     Memory  :  ? KB     Time  :  79 ms

2015-02-11 14:22:16 729

原创 URAL 1297 Palindrome 后缀数组 或 Manacher 求最长回文子串

题目大意:就是给出一个长度不超过1000个只包含大小写英文字母的字符串,输出其最长回文子串大致思路:首先很容易想到用将该字符串本身反转之后与自己连接起来, 中间用一个未出现的字符隔开, 求出后缀数组刚开始想的是枚举回文串长度,但是发现不能二分判断改长度是否就满足题意, 于是想到一个枚举起点和长度利用RMQ查询和对称性判断的O(n*n)的方法不过这样并不是最好的枚举方法

2015-02-09 19:44:32 720

原创 URAL 1517 Freedom of Choice 后缀数组

题目大意:就是对于给出两个长度都为N的只包含大写字母的串求其最长公共子串存在多个长度相同的的串时输出任意一个大致思路:就是一个简单的后缀数组的题...很简单了...细节见代码代码如下:Result  :  Accepted     Memory  :  6774 KB     Time  :  218 ms/* * Author: Gatevin

2015-02-09 16:29:43 575

原创 SPOJ 687 REPEATS Repeats 后缀数组 + RMQ预处理

题目大意:对于给出的字符串(长度大致思路:就是POJ 3693那题的简单版本....不需要找到字典序最小的....首先有这样一个事实: 对于任何一个子串, repetition number >= 1, 所以对于repetition number为1的只需要找到字典序最小的那个字母即可, 那么我们只考虑repetition number >= 2的情况, 如果每一个循环节的

2015-02-09 15:53:54 1087

原创 SPOJ 220 PHRASES Relevant Phrases of Annihilation 后缀数组

题目大意:就是现在给出T组测试数据(T 对于每一组, 求在所给的所有串都出现了至少两次的子串的最大长度, 每个串中出现的两次不能有重叠部分大致思路:很明显的后缀数组利用height数组进行分组的题刚开始的时候没有考虑出现的两次不重合(没仔细读题以为可以...) WA了2发= =具体细节见代码:代码如下:Result  :  Accepted

2015-02-09 15:03:56 586

原创 SPOJ 705 SUBST1 New Distinct Substrings 后缀数组

题目大意:给出一个字符串(长度 大致思路:和SPOJ 694. Distinct Substrings 一样....买一送一..../* * Author: Gatevin * Created Time: 2015/2/9 13:25:03 * File Name: Iris_Freyja.cpp */#include#include#include#in

2015-02-09 13:55:36 746

原创 SPOJ 694 DISUBSTR Distinct Substrings 后缀数组

题目大意:对于给出的字符串(长度不超过1000) 求其不同的子串的个数大致思路:就是一个简单的height数组性质的利用, 如果每个子串我们用从位置j开始且长度为k来表示不同的子串的话则一个height[i]值说明表示从位置sa[i - 1]开始的和sa[i]开始的长度为k 所以用全部的子串数减去重复出现的即可, 具体见代码注释代码如下:Result

2015-02-09 13:46:38 594

原创 POJ 3693 Maximum repetition substring 后缀数组 + RMQ预处理

题目大意:定义一个字符串的repetition number表示这个字符串某个重复出现的子串的出现次数, 每次出现不重合比如abababab是ab重复4次其repetition number是4, 而ababa包含两个有重叠的‘aba’, 只能算repetition number是1(1个‘ababa')给出一个长度不超过100,000的字符串,求出这个字符串的所有子串中repetitio

2015-02-09 13:13:51 659

原创 POJ 3415 Common Substrings 后缀数组 + 单调栈维护

题目大意:用A[i, k]表示以字符串第i位开始长度为k的字符串, B[j, k]同理对于给定的字符串A,B和整数K, 求使得A[i, k] == B[j, k]的三元组(i, j, k)的数量, 其中要求k >= K大致思路:很容易想到先将两个字符串连接起来中间用一个没有出现的值隔开, 求后缀数组首先如果我们只考虑对于给定的k == K的三元组数量, 是可以直接根据后

2015-02-05 15:51:48 681 1

原创 POJ 3294 (UVA 11107) Life Forms 后缀数组

题目大意:给出n( n 求出最长的子串,满足在n个字符串当中出现在一半以上的字符串上, 如果有多个这样的子串,按字典序输出大致思路:简单的后缀数组height数组分组的运用, 首先将所有的串都连接起来, 中间用不同的没有出现在n个字符串中的字符隔开, 然后二分子串长度L判断是否存在满足条件的长度为子串, 对于多个解用vector存储一下其起始位置,最后还原字符串排序后输出即

2015-02-03 14:37:21 1028

原创 POJ 3261 Milk Patterns 后缀数组

题目大意:就是现在统计了一头牛N填的奶的产量(话说20000天这牛多少岁了? = =)就是一个长度为N的整数列问其中最长的重复出现次数不小于K的子串的长度是多少大致思路:很明显用后缀数组, 首先考虑到输入的数=L,判断连续次数是否>=K即可,考虑到如果长度为L的可以,那么长度为L - 1的也可以,具有单调性,使用二分即可查找出最长的长度一发AC感觉真好....

2015-02-03 13:16:53 721

原创 POJ 2774 Long Long Message 后缀数组

题目大意:给出两个很长的串(长度分别 大致思路:用后缀数组的话很明显是个水题,将两个串连起来中间用一个没有出现的值隔开然后求出后缀数组和height数组找到sa[i]及sa[i - 1]来自不同的串的时候height数组的最大值即可代码如下:Result  :  Accepted     Memory  :  5512 KB     Time  :  375

2015-02-03 12:36:58 976

原创 POJ 2406 Power Strings KMP 或 后缀数组

题目大意:就是给出一个串S 长度不超过10^6, 求最大周期使得S = a^n也就是S是有n个字符串a连接起来的,求最大的n(也就是找到最短的a即可)大致思路:首先利用KMP的next数组可以知道循环节的个数, 为n/(n - next[n]) n是S的长度, 这个感觉还是有点晕...另外一个做法是使用后缀数组KMP的做法:代码如下:Result  :

2015-02-02 20:41:09 582

原创 POJ 1743 Musical Theme 后缀数组 楼教主男人八题之一

题目大意:就是现在用1~88表示钢琴上的88个不同的音符(notes), 现在定义一段旋律(theme)是一串连续的音符组成,判断给出的长度为N( N 输出找到的最大长度的theme,如果不存在满足以上条件的theme,输出0大致思路:后缀数组的论文题= =...听说是楼教主男人八题之一Orz....首先为了避免判断theme的变化, 即使所有theme中的所有note

2015-02-02 14:17:25 660

后缀自动机算法代码 C++

后缀自动机C++实现, 将后缀自动机写成了结构体, 配有详细的注释内容

2015-05-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除