bzoj1966 [AHOI2005]病毒检测 结论+暴力
2017-12-28 15:34
453 查看
这个题注意到*为一串合法的病毒串提供了空间,所以对于一串字符串,病毒串的依据是多种的
这时候就需要确定一种构造方法,根据选择空间的变化,显然靠左的要先选
然后就是匹配带?的串,KMP没法匹配,所以只能暴力(其实n^3不应该是正解)
非常难调,没有优美的写法
码:
这时候就需要确定一种构造方法,根据选择空间的变化,显然靠左的要先选
然后就是匹配带?的串,KMP没法匹配,所以只能暴力(其实n^3不应该是正解)
非常难调,没有优美的写法
码:
#include<iostream> #include<cstdio> #include<cstring> char str[1005],ch[555]; int len,len2,lin,n,i,j,k,sp[1005],wz[1005],stz,ndz,cnt,ans,wzcnt; int main() { scanf("%s",str); len=strlen(str); stz=-1; for(i=0;i<len;i++) { if(str[i]=='*'&&str[i-1]=='*')continue; if(str[i]=='*')++cnt; str[++stz]=str[i]; }len=stz+1; scanf("%d",&n); if(cnt==0) { for(i=1;i<=n;i++) { scanf("%s",ch); len2=strlen(ch); for(j=0;j<len2;j++) { if(ch[j]!=str[j]&&(str[j]!='?'))break; } if(j==len&&len==len2)++ans; } } if(cnt>=1) { stz=-1; wz[0]=-1; for(j=0;j<len;j++) { if(str[j]=='*')wz[++wzcnt]=j; } wz[++wzcnt]=len; for(i=1;i<=n;i++) { scanf("%s",ch); len2=strlen(ch); int o=1,lin=0;//0~1; bool bx=0; if(str[0]=='*')o++,lin++; if(o!=wzcnt)// for(j=0;j<len2;j++) { if(o==1&&j!=0) { bx=1; break; } for(k=j,lin=wz[o-1]+1;k<len2&&(str[lin]==ch[k]||str[lin]=='?');) ++lin,k++; if(lin==wz[o]) { o++; lin++;if(lin==wz[wzcnt-1]+1)break; } } if(lin!=wz[wzcnt-1]+1)bx=1; if(bx==1)continue; if(str[len-1]=='*') { ans++; }else if(len2-k>=wz[wzcnt]-wz[wzcnt-1]-1) { for(j=len2-1,k=wz[wzcnt]-1;j>=(len2-(wz[wzcnt]-wz[wzcnt-1]-1))&&(ch[j]==str[k]||str[k]=='?');j--,k--); if(j==(len2-(wz[wzcnt]-wz[wzcnt-1]-1))-1)ans++; } } } printf("%d",n-ans); }
相关文章推荐
- bzoj 1966: [Ahoi2005]VIRUS 病毒检测
- [BZOJ]1966: [Ahoi2005]VIRUS 病毒检测 DP
- bzoj 1966: [Ahoi2005]VIRUS 病毒检测
- [bzoj1966][Ahoi2005][VIRUS 病毒检测] (字符串dp)
- 【bzoj 1966】: [Ahoi2005]VIRUS 病毒检测
- bzoj1966: [Ahoi2005]VIRUS 病毒检测
- bzoj千题计划205:bzoj1966: [Ahoi2005]VIRUS 病毒检测
- BZOJ1966 [Ahoi2005]VIRUS 病毒检测
- 1966: [Ahoi2005]VIRUS 病毒检测
- BZOJ P1966[Ahoi2005]VIRUS 病毒检测
- 1966: [Ahoi2005]VIRUS 病毒检测
- 洛谷P2536 [AHOI2005]病毒检测
- bzoj1965 [AHOI2005]洗牌 结论
- 【AHOI2005】病毒检测
- bzoj1968[Ahoi2005] COMMON 约数研究
- BZOJ 1968: [Ahoi2005]COMMON 约数研究
- BZOJ 1968: [Ahoi2005]COMMON 约数研究
- BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】
- bzoj1965 [Ahoi2005]SHUFFLE 洗牌
- [AHOI2005]【bzoj1969】LANE 航线规划——LCT维护双联通分量