字符串处理
自爄創煇熿
这个作者很懒,什么都没留下…
展开
-
字符串
hdu1073#include#includechar a1[5050],b1[5050];char a2[5050],b2[5050];void fun(char a[],char b[]){ char tmp[5050]; gets(tmp); while(strcmp(tmp,"START")!=0) gets(tmp); while(gets(tm原创 2013-04-07 17:08:16 · 442 阅读 · 0 评论 -
zoj 3643 模拟栈
题意是:给两个字符串a和b ,在b中从左向右找a并删除该段字符串,直到找不到为止,共能删多少次。#include#include#define FF freopen("Input.txt","r",stdin)char m[512010],z[300],flag[512010];int main(){ //FF; int ans,top; while(~sca原创 2013-07-23 13:08:25 · 805 阅读 · 1 评论 -
3613 kmp应用
题意:n组数据,先输入26个数,代表a到z每个字母对应的价值,然后一个字符串,求将字符串分成两个,如果是回文串这个字符串的价值是每个字母的和,不是回文串价值为0 最大价值。如 第一组样例 ,aba ,分成两个a 和ba ,a就是一个回文串。所以价值为1;题解求字符串的回文串前缀,和回文串后缀#include#include#include#includeusin原创 2013-07-29 13:24:33 · 520 阅读 · 0 评论 -
poj 3356 字符串编辑
dp[i][j]为第一个串的前i个字符转化为第二个串的前j个字符所需最小的步骤 如果a[i]==b[i], dp[i][j]=dp[i-1][j-1].如果使用替换操作,那么到dp[i][j]的最小代价应该为dp[i-1][j-1]+1,因为s1[i]!=s2[j],只要把s1[i]换成s2[j]或者把s2[j]换成s1[i]即可如果使用删除操作,那么到dp[i][j]的最小代翻译 2013-05-02 21:03:33 · 578 阅读 · 0 评论 -
nyoj 373 (时间复杂度)
非常简单的题目,写了没有半小时,调试几分钟就对了,比赛是愣是没写。也不知怎么搞的。#include#include#include#includeusing namespace std;char s[100005];stacks1;stacks2;int main(){ //freopen("Input.txt","r",stdin); int n,ncase原创 2013-04-29 09:22:16 · 684 阅读 · 0 评论 -
Martian Strings (kmp应用)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26368给你一个模式串s,和m个匹配串,问给把匹配串写成 p[a,b]+p[c,d]=s, 即为是否可以把匹配串分成两个在模式串中出现,求匹配串的个数。先用匹配串进行kmp记录在模式串中首次出先的位置,在把两个串反转,进行kmp,在比较首尾和是否小于s的长度。#原创 2013-04-30 10:15:34 · 651 阅读 · 0 评论 -
求一个字符串的最长回文串
manacher算法: #include#include#includeusing namespace std;const int M=1100010;char b[M],a[M<<1];int p[M<<1];int main(){ int i,n,id,Maxl,Maxid,ncase=1; while(~scanf("%s",b)) {原创 2013-04-29 17:30:22 · 647 阅读 · 0 评论 -
kmp算法
得到next函数:覆盖函数(overlay_function)覆盖函数所表征的是pattern本身的性质,可以让为其表征的是pattern从左开始的所有连续子串的自我覆盖程度。比如如下的字串,abaabcaba由于计数是从0始的,因此覆盖函数的值为0说明有1个匹配,对于从0还是从来开始计数是偏好问题,具体请自行调整,其中-1表示没有覆盖,那么何为覆盖呢,下面比较原创 2012-10-13 09:58:50 · 397 阅读 · 0 评论 -
hdu2594kmp
充分利用next函数,把b接在a的后面,即可#include#includeint next[100005];char a[50005],b[50005];void get_next(char *p,int len){ int j=1; next[0]=-1; int k=-1; for(;j<len;j++) { while(原创 2013-04-17 21:28:57 · 439 阅读 · 0 评论 -
hdu2222,(ac自动机)
网上讲解很多,其实自己可以模拟一遍,就能明白#include#include#include#includeusing namespace std;const int maxn=500010;char str[1000050],key[55];struct node{ node *fail; node *next[26]; int count;原创 2013-04-16 13:03:57 · 526 阅读 · 0 评论 -
poj2001(字典树)
#include#include#includeusing namespace std;struct node{ int count; node *next[26]; node() { count=0; memset(next,NULL,sizeof(next)); }};node *root;void InS原创 2013-04-17 08:47:48 · 460 阅读 · 0 评论 -
hdu3065ac自动机
#include#include#include#include#include#includeusing namespace std;const int maxn=5000100;char str[2000050],key[55];struct hh{ string ss; int num; hh() { ss="";原创 2013-04-16 13:05:00 · 461 阅读 · 0 评论 -
hdu2896ac自动机
#include#include#include#include#include#include#includeusing namespace std;const int maxn=5000100;char str[2000050],key[55];int allnum,vis[502];vectorv[1001]; //用来标记每个网站的个数,struct node{原创 2013-04-16 13:05:41 · 532 阅读 · 0 评论 -
2013 ACM/ICPC Asia Regional Changchun Online hdu Theme Section
题意:给定一个字符串,是否存在字符串的首部,尾部和中部 ,求最长的。kmp解决。#include#include#includeusing namespace std;const int N=1e6+50;int next[N];char str[N];void Get_Next(char *p,int len){ int j=1; next[0原创 2013-09-29 11:53:18 · 1031 阅读 · 0 评论