hust 1328 String (kmp+dp)
来源:互联网 发布:淘宝磨损的化妆品真假 编辑:程序博客网 时间:2024/05/17 07:23
题意:
给出一个字符串,问这个字符串前缀出现的次数。
题解:
之前hdu的一道题目一样,但是这次意识到上次的贪心算法是错的,ababa这个数据就可以否定了,不过不知道为什么竟然ac了。这题先算出next数组,然后用dp, dp[i]=dp[next[i]]+1,同时统计ans+=dp[i];这是一种dp的解法,还有一种方法是倒着推 dp[next[i]]+=dp[i],dp初始化为1。
#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<map>#include<set>using namespace std;#define B(x) (1<<(x))typedef long long ll;const int oo=0x3f3f3f3f;const ll OO=1LL<<61;const ll MOD=10007;const int maxn=100000+5;char str[maxn];int next[maxn],dp[maxn];void get_next(char s[],int len){ int i=0; next[i]=-1; int j=-1; while(i<len) { if(j==-1||s[i]==s[j]) { i++;j++; next[i]=j; } else j=next[j]; }}int main(){ int len,T; ll ans; scanf("%d",&T); while(T--) { scanf("%s",str); len=strlen(str); get_next(str,len); memset(dp,0,sizeof dp); ans=0; for(int i=1;i<=len;i++) { dp[i]=dp[next[i]]+1; ans+=dp[i]; } cout<<ans<<endl; } return 0;}
#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<map>#include<set>using namespace std;#define B(x) (1<<(x))typedef long long ll;const int oo=0x3f3f3f3f;const ll OO=1LL<<61;const ll MOD=10007;const int maxn=100000+5;char str[maxn];int next[maxn];int dp[maxn],mark[maxn];void get_next(char s[],int len){ int i=0; next[i]=-1; int j=-1; while(i<len) { if(j==-1||s[i]==s[j]) { i++;j++; next[i]=j; } else j=next[j]; }}int main(){ int len,ans,T; scanf("%d",&T); while(T--) { scanf("%s",str); len=strlen(str); get_next(str,len); ans=0; for(int i=0;i<=len;i++) dp[i]=1; for(int i=len;i>=1;i--) dp[next[i]]+=dp[i]; for(int i=1;i<=len;i++) ans+=dp[i]; printf("%d\n",ans);; } return 0;}
0 0
- hust 1328 String (kmp+dp)
- HUST 1328 String KMP
- HUST 1328 String KMP 递增思路
- 【hust 1328】 - String
- CF494B Obsessive String(KMP+DP)
- 【XSY2472】string KMP 期望DP
- HUST 1010 (KMP 水~)
- 【dp】HUST-1351-Group
- HUST 1354 - Rubiks (DP)
- HDU 3336 Count the string(KMP+dp)
- [HDU 3336]Count the String[kmp][DP]
- HDU 3336 Count the string KMP+DP
- hdu 3336 Count the string KMP+DP
- HDU 3336 Count the string kmp+dp
- hdu -- 3336 Count the string(KMP + dp)
- hdu3336 Count the string KMP+dp
- hdu3336 Count the string(kmp+dp)
- Obsessive String - CodeForces 494 B KMP+dp
- ZOJ 1047 Image Perimeters
- java集合框架总结(上)
- BZOJ1012最大数maxnumber
- C++多继承MI名称冲突解决方法(作用域解析运算符)
- HDU(1043):八数码的 A* 与 双BFS算法
- hust 1328 String (kmp+dp)
- VS中MFC连接MySQL由于系统不同位(32/64)引起的错误:无法解析的外部符号 _mysql_init@4、_mysql_query
- 一个牛逼的判断移动设备的类 可以玩玩Mobile_Detect
- UVa 215 - Spreadsheet Calculator
- 浅析MWC飞控PID算法
- PHP 资源大全
- (ZT)replace vbscript with javascript
- Div圆角边框的实现例子+代码
- LeetCode:Pascal's Triangle一