bzoj3059 归途与征程(字符串,优化dp)
2018-01-13 21:37
295 查看
各种奇怪的优化,然后各种恶心的细节,然后直接的暴力。
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <queue> using namespace std; #define ll long long #define N 100010 #define inf 0x3f3f3f3f inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int n,m,ans=0,num=0,tot=0,len[110],f[N<<1][110];//f[i][j]-i及i以后,最早的出现j串的位置 char a[N<<1],b[110],t[110]; queue<int>pos[110]; void solve(){ int last=inf; for(int i=n+n-1-num+1;i>=1;--i){ bool flag=1; for(int j=1;j<=num;++j) if(t[j]!=a[i+j-1]){flag=0;break;} if(flag) last=i;f[i][tot]=last; } } bool jud(int st){ int p=st,ed=st-1+n; if(b[1]!='*'){ if(f[st][1]!=st) return 0;else p=st+len[1]; }else p=f[st][1]+len[1];if(p>=inf) return 0; for(int i=2;i<tot;++i){ p=f[p][i]+len[i];if(p-1>ed) return 0; } if(b[m]!='*'){ if(f[ed-len[tot]+1][tot]!=ed-len[tot]+1) return 0; if(p<=ed-len[tot]+1) return 1;return 0; }if(f[p][tot]+len[tot]-1<=ed) return 1;return 0; } int main(){ // freopen("journey1.in","r",stdin); scanf("%s%s",b+1,a+1);n=strlen(a+1);m=strlen(b+1); for(int i=1;i<n;++i) a[i+n]=a[i]; for(int i=1,last=1;i<=m;i=last){ while(i<=m&&b[i]=='*') i++;last=i;num=0; while(last<=m&&b[last]!='*') t[++num]=b[last],++last; if(i==last) break;len[++tot]=num;solve(); } for(int i=1;i<=n;++i) if(jud(i)) ans++; printf("%d\n",ans); return 0; }
相关文章推荐
- BZOJ3790 神奇项链 解题报告【字符串】【Manacher】【树状数组】【数据结构优化DP】
- bzoj 3059: 归途与征程
- [jzoj]3427. 【NOIP2013模拟】归途与征程(字符串DP+贪心)
- BZOJ1010玩具装箱[DP+单调性优化]
- 字符串构造的dp 【bzoj1009 &bzoj1030】
- BZOJ1597(Usaco2008 Mar)[土地购买]--斜率优化DP
- [BZOJ3963][WF2011][CDQ分治][斜率优化][DP]MachineWorks
- [BZOJ3672][NOI2014]购票-点分治-CDQ分治-斜率优化DP
- bzoj 3437: 小P的牧场(斜率优化DP)
- [BZOJ3156]防御准备(斜率优化dp)
- BZOJ 3120 Line【矩阵乘法优化dp
- [状压 DP] BZOJ 4416 [Shoi2013]阶乘字符串
- BZOJ 3437: 小P的牧场 斜率优化DP
- BZOJ 2131 数据结构优化DP 解题报告
- [BZOJ1096]ZJOI2007仓库建设|斜率优化DP
- [bzoj1966][Ahoi2005][VIRUS 病毒检测] (字符串dp)
- BZOJ 1855: [Scoi2010]股票交易:(单调队列优化DP)
- bzoj-3675 序列分割APIO2014 斜率优化dp
- [BZOJ4709][JSOI2011]柠檬(斜率优化DP)
- bzoj 1010 [HNOI2008]玩具装箱toy(DP的斜率优化)