
字符串
f_zyj
一个追逐蝴蝶的人!
展开
-
CF-Codeforces Round #487 (Div. 2)-B-A Tide of Riverscape
ACM模版描述 题解给定一个初始包含 .01.01.01 的序列,问是否存在一种替换方法,将 ... 替换做 000 或者 111 后保证不是所有的 1≤i≤|s|−p1≤i≤|s|−p1 ≤ i ≤ |s| - p 都满足 s[i]=s[i+p]s[i]=s[i+p]s[i] = s[i + p],不存在则输出 NoNoNo。最开始读错题意了,以为必须所有的都不满足,所...原创 2018-06-12 19:27:27 · 245 阅读 · 0 评论 -
51Nod-1469-淋漓尽致子串
ACM模版描述题解这个题用后缀自动机和后缀数组都可以干,官方题解说的是后缀自动机。我用的是后缀数组,DADA 算法,根据求出来的 height[]height[] 的曲线来判定合法的数目,具体的算法思路可以看看 getupdown 的博客,说的挺详细的,这也是我写这个题所参考的博客,赞一个!!!膜拜大佬……%%%\%\%\%代码#include <iostream>#include <cstdio原创 2017-08-02 20:13:02 · 400 阅读 · 0 评论 -
51Nod-1554-欧姆诺姆和项链
ACM模版描述题解这个题思路好巧妙啊,我想了好久都没有想通,找了一个前辈的题解才搞懂……看了好大一会儿~~~贴一下该大牛的题解:来源:_TCgogogo_’s blog 感谢大神详细的题解!!!代码#include <cstdio>#include <cstring>int const MAXN = 1e6 + 5;int n, k;char s[MAXN];char ans[MAXN];i原创 2017-07-23 15:25:43 · 469 阅读 · 0 评论 -
51Nod-1595-回文度
ACM模版描述题解先吐槽一下,这个题目搬运工可不走心啊……翻译的有问题,还是看了讨论区才知道题意有问题……这个题要你求所有前缀回文度的和,这个不难想到,在 macachermacacher 算法中求出来的一个数组中,表示着以某个位置为轴心的回文半径,那么我们完全可以通过这个来判定某一个前缀是否为回文,这样也就能够求出来所有回文前缀。此时,我们应该仔细分析什么是回文度,其实,回文度是一种递归嵌套关系,原创 2017-07-31 13:32:56 · 405 阅读 · 0 评论 -
图灵杯-第四届“图灵杯”NEUQ-ACM 程序设计竞赛-J-简单的变位词
ACM模版描述题解简单的字符串排序去重问题,用 map 搞搞,打标签,然后用 vector 存储,搞搞事情,最后输出,多于 5 个输出前 5 个,少于 5 个,有几个输出几个……注意,去重的时候只是去掉相同的词,但是个数还是要算的。我一开始忘了去重,╮(╯▽╰)╭哎,以后打比赛前夕再也不熬夜了,晚上五点才睡,第二天各种 bug 各种 wa~~~代码#include <iostream>#inclu原创 2017-06-12 01:17:48 · 645 阅读 · 0 评论 -
蓝桥-ALGO-24-统计单词个数
ACM模版描述题解这个题的 dp 思维很简单,设 dp[i][j] 表示前 i 个字符分成 j 份的最优解,不过对于任意区间 [i,j][i, j] 的单词数就是一个问题了,一开始没有想通这里怎么搞,所以就否定了这种 dp 思路,恐怕搞不定它,后来发现数据如此之小,单词不超过 6 个,字符串长度不超过 200,简直就是为暴力而生,于是暴力一发,求出任意区间的 val[][],dp 搞搞竟然 AC 了原创 2017-06-03 18:18:05 · 646 阅读 · 1 评论 -
蓝桥-ALGO-12-幂方分解
ACM模版描述题解典型的递归问题,只要细心,总会搞出事情来的。这里需要注意的是,加号的输出要额外多判断一下此时拆分的数是否已拆完,如果已经拆完就不要多输出加号了,不然会出现最后结尾多出一个加号,中间会出现若干个 “+)” 的情况(づ ̄3 ̄)づ╭❤~当然,如果想要最后一起判断也不是不行,先将串存储起来,最后统一去加号即可。一开始我就是这样写的,后来感觉麻烦了,所以改写成了第一种。代码#include原创 2017-06-02 03:12:53 · 407 阅读 · 1 评论 -
ZOJ-The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple-C
ACM模版描述 题解这个题的难点是翻译,翻译好了,一遍 AC。首先输入 T,表示数据组数。 接着输入 n 和 q 表示 n 次询问与 q 次关系。 然后一个 c 表示可能出现的名字,接着就是 c 个名字。 然后是 q 次关系,每次开头一个 m 表示关系人数,接着 m 个人组成的关系网。 最后是 n 次询问,每次询问给出 q 个 0 或 1,表示某人是否出现在第 q 次关系网中。 问,针对原创 2017-04-23 23:40:10 · 644 阅读 · 0 评论 -
EOJ-大学生程序设计邀请赛(华东师范大学)-A-拼音魔法
ACM模版描述题解字符串模拟题,不难,就是坑……一定要细心、一定要细心、一定要细心……重要的事说三遍。另外,尼玛啊,我拼音都忘完了,平时敲键盘只是想着怎么拼,但是很久没有想过怎么加声调了,结果,坑死了,无限 WA 啊!代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN原创 2017-05-12 22:22:36 · 3054 阅读 · 5 评论 -
NYOJ-1236-挑战密室
ACM模版描述 题解这是第八届河南 ACM 省赛的第一题好像,和去年的第一题表达式求值有相似之处,但是由于这个题目明确提示,不会有嵌套,所以不必使用栈,直接模拟一遍就可以了。感觉比去年的那个要简单很多。可是难度等级却比去年的还高……代码#include <iostream>#include <cstring>#include <map>#include <cstdio>#include <原创 2017-05-03 22:50:29 · 475 阅读 · 0 评论 -
KMP算法
ACM模版KMP_Pre/* * next[]的含义,x[i - next[i]...i - 1] = x[0...next[i] - 1] * next[i]为满足x[i - z...i - 1] = x[0...z - 1]的最大z值(就是x的自身匹配) */void KMP_Pre(char x[], int m, int next[]){ int i, j; j =原创 2016-06-16 20:55:21 · 3221 阅读 · 3 评论 -
51Nod-1277-字符串中的最大值
ACM模版描述题解用 kmp 处理一下获取一个 next 数组即可,然后递推一遍,O(n),简单快捷,完美!代码#include <iostream>#include <cstring>using namespace std;const int MAXN = 1e5 + 10;char str[MAXN];int len;int nt[MAXN];int res[MAXN];void get原创 2017-04-20 21:34:31 · 1634 阅读 · 0 评论 -
腾讯2017暑期实习生编程题-A-构造回文
ACM模版描述题解很久很久以前,大概是去年这个时候,在51上做过一道求原串如何删除才能使得回文串最长,输出最长长度。相比这个问题,不过是少了一步,只需再多一步总数-最长回文串长度即可,至于最长回文串长度只需要将原串逆序排列,然后求原串与逆序串的最长公共子序列即可,即 LCS 问题。代码#include <iostream>#include <algorithm>#include <cstring原创 2017-03-07 23:07:15 · 511 阅读 · 0 评论 -
关于测试单词数目问题(14届蓝桥杯b组第一题)
今天闲来无事,感觉自己又在虚度光阴,于是就打开了14届的蓝桥杯b组赛的第一题,想要刺激刺激自己懈怠的神经,拿到题一看,是一道填空题,只允许在空中添上应该填的那部分代码,不允许多一点改动,看到题,我想杀人,我承认,我有点暴力倾向,但请相信,我是一个温柔的人+_+。试问我为何想要杀人,请看题如下:输入一个字符串,求它包含多少个单词。单词间以一个或者多个空格分开。第一个单词前,最后一个单词后也可能有0原创 2015-11-23 23:19:13 · 2172 阅读 · 3 评论 -
51Nod-1491-黄金系统
ACM模版描述题解拿到这种题,不用多想,先枚举一些q^i,可以发现在某种程度上其符合斐波那契数列…… q^0用A表示,q^1用B表示, 我们可以发现,每一个数都可以用xA + yB表示, 而这里的x和y在一定程度上都符合斐波那契数列。 这也就给了我初始的想法,能否遍历一遍, 遇见相连两个都是1的时候就减去这两个1继而在高位添1, 就着这个想法尝试,这时注意到n-i的问题, 于是乎,想了原创 2016-09-29 03:49:48 · 654 阅读 · 2 评论 -
51Nod-1523-非回文
ACM模版描述题解MDZL,这么简单一道题,三个小时还没AC……一直有三组数据过不去,第18、24、25组数据,经过测试发现一个十分邪性的问题,有的测试数据尾有\r\n,而有的却没有,这是神马情况啊~~~这是我的Xcode的工具FileMerge的对比结果(左边是51给的测试数据文件,右边是本地测试文件): 这简直是给我开国际玩笑啊!!!真是搞不懂为啥会有10个人AC……我的算法没错啊,除了文件尾原创 2016-10-22 04:28:22 · 2117 阅读 · 8 评论 -
HDU-2017"百度之星"程序设计大赛-复赛-1001-Arithmetic of Bomb
ACM模版描述 题解这个题是签到题,出的不好,描述不到位。或者就是数据比较弱?第二个数字是个位数……那就很水了。代码#include <iostream>#include <cstring>using namespace std;const int MAXN = 1111;const int MOD = 1e9 + 7;char s[MAXN];int main(int argc, const原创 2017-08-18 16:42:53 · 598 阅读 · 0 评论 -
HDU-2017中国大学生程序设计竞赛-网络选拔赛-1004-A Secret
ACM模版描述题解这个题不难解,因为是模版题,我有一个模版是专门查找模式串在原串中出现的次数,而这个题呢?求的是每一个模式串的后缀串在原串中出现的次数乘以长度之和,所以一开始我是暴力枚举后缀的,然而超时了,后来发现这个模版的求解思路其实就是从局部到全局的一个查找,那么我们完全可以在一次查找中查找出所有的后缀出现的次数,当然,说起后缀可能有些绕,我们先将两个串全部翻转一下就好了,这样就成前缀串了。代码原创 2017-08-20 17:41:14 · 962 阅读 · 0 评论 -
CF-Avito Code Challenge 2018-A-Antipalindrome
ACM模版描述题解这个题大胆的蒙就是了……只有三种结果 0、n、n−10、n、n−10、n、n - 1,对于全部是同样字母的,结果是 000,对于不是回文串的,输出 nnn,对于是回文串的输出 n−1n−1n - 1,完美解决。这个题拼的就是读题速度,因为他的样例已经给出了所有可能……开局五分钟一千多 ACACAC 好像。代码#include &amp;lt;iostr...原创 2018-05-28 17:05:36 · 304 阅读 · 0 评论 -
KWIC-C/C++实现
吐槽最近我们 JavaJava 老师不知道为啥非要我用 C/C++C/C++ 来实现 KWICKWIC,但是因为没有上过课,不知道这个东西是干嘛的,所以想网上 downloaddownload 一下,然而,百度后发现,实在是没有什么能看的过眼的代码,修改他们的代码难度比自己写要大好多,于是,决定找一下定义自己动手实现一下。描述KWICKWIC 索引系统接受一些行,每行有若干字,每个字由若干字符组成;原创 2017-11-17 13:09:06 · 2399 阅读 · 3 评论 -
51Nod-1638-字符串重组
ACM模版描述题解仔细分析这个问题两个串儿的结构,首先将第一个串通过 ii 和 jj 拆解成三部分,i+1∼j−1i + 1 \sim j - 1 作为第二个串儿的第一部分,j∼n−1j \sim n - 1 翻转拼接其后,0∼i0 \sim i 翻转拼接其后,所以其实这个问题也就是为字符串匹配问题。首先将原串进行翻转然后 kmpkmp,之所以要这样做是因为第二个串儿后边两部分是翻转后的匹配,并且要原创 2017-11-13 00:32:06 · 477 阅读 · 0 评论 -
HDU-5955-Guessing the Dice Roll
ACM模版描述题解ACAC 自动机 ++ 高斯消元。 Ps. 截图来源 mcginn’s blog。代码#include <queue>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MAX_LEN原创 2017-10-12 22:30:25 · 755 阅读 · 0 评论 -
POJ-2185-Milking Grid
ACM模版描述题解很神奇的一个题……求最小覆盖子矩阵,首先因为题目约定,列数很小,所以我们可以先将列处理一下,获取出最小列覆盖,这里我们需要考虑每一行的列覆盖的所有可能,然后将能覆盖所有行的最小列数取出来,剩下的就是处理行了,处理行的时候我们需要用到 KMPKMP 的 next[]next[],注意这里,模式串已经不再是一个字符串了,元素也不再是一个字符了,而是将每一行都看成一个元素,对列进行 KM原创 2017-10-09 21:26:42 · 498 阅读 · 0 评论 -
HDU-5558-Alice's Classified Message
ACM模版描述题解给定一个长度不超过 10W10W 的只包含小写字母的字符串,从下标 00 到 n−1n - 1。从下标 00 开始操作, 每次对于下标 pospos 查找下标 pospos 开始的子串中最长的在其他地方出现过的长度, 其他出现的位置要求起点在位置 pospos 之前,然后 pospos 移动到这个长度之后继续操作; 如果没有这样的最长串儿就直接 pos++pos++,继续操作原创 2017-10-18 17:19:06 · 800 阅读 · 0 评论 -
POJ-3461-Oulipo
ACM模版描述题解KMPKMP 入门级题目,模板题。代码#include <iostream>const int MAXN = 1e4 + 10;const int MAXM = 1e6 + 10;void KMP_Pre(char x[], int m, int next[]){ int i = 0, j = next[0] = -1; while (i < m) {原创 2017-10-09 20:12:52 · 431 阅读 · 0 评论 -
POJ-2752-Seek the Name, Seek the Fame
ACM模版描述题解求既是前缀串儿又是后缀串儿的不同子串的长度,长度从小到大输出。这里很容易想到要用 next[]next[],这个数组也就是 prefixprefix 数组,代表匹配失配时前跳的情况,并且保证前缀都是相同的,只需要继续从失配处前跳的位置开始检查即可,那么如果我们从字符串尾部开始不断回溯前跳,当新的匹配位置和最后一个字符相同时,说明此时的前缀串是可以和对应长度的后缀串儿进行匹配的,则将原创 2017-10-09 17:24:47 · 391 阅读 · 0 评论 -
POJ-1961-Period
ACM模版描述题解类似于 POJ-2406-Power Strings,不过这个题是要求处理所有的前缀的循环节,并且只输出循环节出现次数大于 11 的前缀情况。代码#include <iostream>#include <cstring>using namespace std;const int MAXN = 1e6;int n;char s[MAXN];int nxt[MAXN];void原创 2017-10-09 16:29:18 · 459 阅读 · 0 评论 -
POJ-2406-Power Strings
ACM模版描述题解字符串最小循环节问题,这个在 KMPKMP 中的 next[]next[] 就可以获取。首先,我们知道 next[]next[] 数组是控制失配时前跳的位置,所以模式串从第 11 位到第 next[n]next[n] 位与模式串第 n−next[n]n - next[n] 位到第 nn 位是互相匹配的,如果这两个部分产生交集,则有可能是存在长度小于模式串长度的循环节,为啥是可能呢?原创 2017-10-09 15:58:24 · 790 阅读 · 0 评论 -
HDU-2017 ACM/ICPC Asia Regional Shenyang Online-1001-string string string
ACM模版描述题解后缀自动机……我知识的盲区,学过 ACAC 自动机,后缀数组,等等算法,就是没有学过这个……怪不得做不出来。建立后缀自动机后,对每个节点统计出现次数,然后对字符串的后缀进行加一,更新每个节点的父节点就好了。代码#include <iostream>#include <cstring>using namespace std;typedef long long ll;const in原创 2017-09-12 16:57:21 · 447 阅读 · 0 评论 -
51Nod-1612-合法表达式
ACM模版描述题解我们需要考虑到能够加多少括号以及加括号的动态规划过程,这里格外要注意一个问题,就是初始字符串不合法,并且无论怎么加都不合法的情况,比如 5//45//4,这是真实存在的一组样例,是第三组样例,结果应该输出 00。代码#include <cstdio>#include <cstring>using namespace std;const int MAXN = 3e5 + 10;c原创 2017-09-22 18:56:13 · 421 阅读 · 0 评论 -
HDU-2017 多校训练赛10-1001-Admiral
ACM模版描述 题解这个题和八数码的问题十分像,如果没有记错的话,八数码那个题用到的也是 搜索+HASH搜索 + HASH,不过它的 HASHHASH 利用的是康拓展开式,这里我们采用的 HASHHASH 略微不同,就是一个普通的 HASHHASH,稍微想想应该是可以想开的。代码#include <cstdio>#include <cstring>#include <iostream>#in原创 2017-08-29 13:27:03 · 502 阅读 · 0 评论 -
51Nod-1753-相似子串
ACM模版描述题解字符串哈希问题,代码小长……给大家贴一下我佐学姐题解以及他的代码吧……好崇拜学姐。代码#include <algorithm>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int MAXN = 3e5 + 10;typedef long long ll;const ch原创 2017-09-13 19:51:37 · 435 阅读 · 3 评论 -
HDU-2017 多校训练赛8-1006-Fleet of the Eternal Throne
ACM模版描述题解很明显是 ACAC 自动机,可是我学倒是学过,没有正儿八经的写过,套套模版还行,稍有变动就见鬼了,过几天得刷一刷 ACAC 自动机的专题了。这个题大致是搞懂了,但是写起来还是有些心有余而力不足,还是得多练习啊!代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int原创 2017-08-23 19:56:55 · 396 阅读 · 0 评论 -
51Nod-1478-括号序列的最长合法子段
ACM模版描述题解一拿到题,就想到了一个十分低级的做法,先正着遍历一遍,遍历过程中再倒着遍历(One),不负众望,TLE了四组数据。无奈,想了一下,只好使用栈来实现了,先预处理一遍,将括号匹配在一起,然后检索最长串即可(Two)。代码One:// TLE//#include <stdio.h>//#include <string.h>////const int MAXN = 1e6 + 5原创 2016-09-26 18:11:51 · 741 阅读 · 0 评论 -
HDU-1004-Let the Balloon Rise
ACM模版描述题解水题一道,处理方法多了去,我用的map躺过。代码#include <iostream>#include <map>#include <string>using namespace std;string balloon;map<string, int>::iterator it;int main(int argc, const char * argv[]){ int原创 2016-10-11 01:51:17 · 355 阅读 · 0 评论 -
仿射密码解密
描述已知仿射加密的变换公式为 c = (11 * m) mod 26,试着对密文解密。解析这里我们要强调的是加密过程不是对字符对应的ascii值进行加密,而是用0~25表示a~z26个英文字母。通过乘法加密和加法加密再取模。于是我们顺理成章的就会想到逆向推解。当然这里的推解过程虽然不是很直接,但是并不难,如下代码。另外,并不是所有的仿射加密都可以逆向解密,只有符合C = Ek(m) =(k1m +原创 2016-06-17 00:07:56 · 13947 阅读 · 1 评论 -
字符串 HASH
ACM模版字符串 HASH/* * 字符串 Hash * 注意:mod选择足够大的质数(至少大于字符串个数) */unsigned int hashA(char *url, int mod){ unsigned int n = 0; char *b = (char *)&n; for (int i = 0; url[i]; i++) { b[i原创 2016-06-15 18:03:09 · 2093 阅读 · 0 评论 -
NYOJ-37-回文字符串
描述描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如”aba”。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。输入 第一行给出整数N(0< N <100) 接下来的N行,每行一个字符串,每个字符串长度不超过1000.输出 每行输出所需添加的最少原创 2016-07-01 01:18:52 · 938 阅读 · 0 评论 -
后缀自动机
ACM模版后缀自动机const int CHAR = 26;const int MAXN = 250010;struct SAM_Node{ SAM_Node *fa, *next[CHAR]; int len; int id, pos; SAM_Node(){} SAM_Node(int _len) { fa = 0;原创 2016-07-12 19:20:09 · 1581 阅读 · 0 评论 -
AC自动机
ACM模版AC自动机参考题目链接HDU 2222 Keywords Search代码/* * 求目标串中出现了几个模式串 */struct Trie{ int next[500010][26], fail[500010], end[500010]; int root, L; int newnode() { for (int i = 0; i原创 2016-07-12 18:12:37 · 2063 阅读 · 1 评论