OI-字符串
略
嘉伟森的猫
NYU Shanghai本科,MBZUAI机器学习硕士,深度学习/强化学习菜鸡
展开
-
UVa 1593(字符串/模拟)
传送门 题意:输入若干行代码,要求各列单词的左边界对齐且尽量靠左。单词之间至少要空一格。每个单词不超过80个字符,每行不超过180个字符,一共最多1000行 说实话补几个空格就完了,但是因为一个很容易忽视但很致命的细节RE了一个小时...... 先看看AC代码: #include<cstdio> #include<cstring> #include<iost...原创 2020-02-09 15:39:18 · 216 阅读 · 0 评论 -
浅谈字符串哈希
一.分类 1.单模哈希 g(s)=f(s)%mod 注意:①MOD要是质数(使模的结果等概率分布在0~mod-1)②1e9左右不等于1e9+7或1e9+9 2.双模哈希 3.自然溢出(unsigned long long) 二.比较 速度 正确率 自然溢出(国内不会卡)(不建议用于POI) 1 2 单模哈希 2 3 双模哈希(绝对...原创 2018-08-20 16:40:48 · 550 阅读 · 0 评论 -
hihocoder 1032(manacher)
传送门 模板题。 关键:记一个最远延伸的起点id。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=1e6+4; char s[N]; int p[N<<1]; in...原创 2017-11-09 19:46:07 · 313 阅读 · 0 评论 -
hihocoder 1015(KMP)
传送门 再刷模板ing。 #include #include #include #include using namespace std; char T[1000004],W[10004]; int n,m,f[10004]; inline void getfail(char *W,int m) { f[0]=f[1]=0; for (register int i=1;i<m;++i)原创 2017-11-09 19:24:51 · 243 阅读 · 0 评论 -
hihocoder 1014(Trie)
传送门 Trie树模板题,询问一个前缀在字符串集合中出现的次数。 #include #include #include #include using namespace std; const int N=1e6+4; struct Trie { int ch[26][N]; int val[N],tot; inline Trie() {memset(ch,-1,sizeof(ch))原创 2017-11-09 19:13:27 · 250 阅读 · 0 评论 -
Luogu 3805(manacher)
传送门 模板题。 注意:id要初始化为0,否则本地都会RE(局部变量的初值不会自动为0)。 P.S.本文可能是本菜鸡AFO之前最后一篇(或者几篇)博文。7月底开始写博客时第二篇便是manacher,现在以此收尾,不得不感叹时间飞逝~~最后几天好好努力吧! #include #include #include #include #include #include using namesp原创 2017-11-07 20:05:57 · 167 阅读 · 0 评论 -
Luogu 3375(KMP)
传送门 KMP模板题,要求输出匹配点的起始位置以及模式串所有位置的nxt(也称作fail)指针。 #include #include #include #include #include using namespace std; const int N=1e6+4; char T[N],W[N]; int n,m,f[N]; vector s; inline void getfail(cha原创 2017-11-06 20:50:12 · 218 阅读 · 0 评论 -
bzoj 2882(最小表示法)
传送门 问题:将原串复制一次接到尾部,找出构成的新串中长度为原串长度且字典序最小的串并输出。 自己也讲不清楚,只是意会。。。转一篇讲解。 O(n)求字符串最小表示法 P.S.此题还可以用后缀自动机解决,然而本蒟蒻并不会写orz。#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using nam原创 2017-08-14 15:54:21 · 472 阅读 · 0 评论 -
bzoj 2938(AC自动机+拓扑排序)
传送门 题意:略构建AC自动机,无限长的安全代码满足能一直在AC自动机上匹配但始终匹配不上任何一个危险串。从根往下dfs(只走不作为危险串结尾的结点),如果能找到一个环,就存在无限长的安全代码,否则不存在。找环用拓扑排序实现。注意:所有字符串的题,siz,cnt等变量一定千万切记不要错写成char,否则可能会在废掉五六个小时orz。#include<cstdio> #include<cstring原创 2017-08-05 18:24:31 · 335 阅读 · 0 评论 -
bzoj 3790(manacher+树状数组)
传送门 问题:用manacher求出回文子串长度,每条回文串转化为一条线段,要用最少的线段,覆盖区间[1,n]求最小覆盖用“dp+树状数组/线段树维护区间最小值”或者“贪心”都可以,下面的代码用的是dp+树状数组。#include<bits/stdc++.h> using namespace std; const int maxn=50003,INF=0x3f3f3f3f; char a[maxn原创 2017-08-02 22:52:10 · 250 阅读 · 0 评论 -
bzoj 2160(manacher+差分)
传送门 问题:对于给出的长度为n的字符串如果其回文串的数量比K少则输出-1, 否则输出所有回文串中长度为奇数的最长的前K个回文串的长度的乘积, 结果对于19930726取模输出。由于只考虑奇数长度的回文子串,所以不用构造新串,直接在原串头尾添加”+”,”-“做标记后跑manacher,求出回文半径p[i]后用差分前缀和思想统计各长度回文串个数,最后乘的时候套个快速幂即可。#include<bits原创 2017-08-02 22:46:48 · 332 阅读 · 0 评论