ZOJ 3817 Chinese Knot (字符串HASH)
来源:互联网 发布:windows rt看视频 编辑:程序博客网 时间:2024/05/21 10:32
字符串HASH +搜索
str[j]=str[j-1]*seed+"str[j]"
#include <iostream>#include <cstdio>#include <cstring>#define ULL unsigned long long using namespace std;ULL str[9][100010];char s[100100];#define seed 107//#define M 100007771int n,m;int ans[100100];int ks,ke;int size;ULL HH[100010];bool dfs(int l,int k,ULL hash,int deep){//ans[k]=l/2*n+((l&1)?n-p+1:p);if(n+k>=m){for(int i=0;i<8;i++){if(i==(l^1))continue;int q=m-k;ULL ss=hash*HH[q]+str[i][q];//printf("l=%d,p=%d,k=%d,flag=%d\n",l,p,k,flag);if(ss==str[8][m]){ans[deep]=i;size=deep+1;ke=q;return true; }}return false;}for(int i=0;i<8;i++){ans[deep]=i;if(hash*HH[n]+str[i][n]!=str[8][k+n])continue;if(i!=(l^1)&&dfs(i,k+n,hash*HH[n]+str[i][n],deep+1)) return true;}return false; }bool solve(){for(int i=0;i<8;i++){for(int k=1;k<=n;k++){size=0;if(m>n-k+1){size=0;ks=k;ans[0]=i;if(dfs(i,n-k+1,str[i][n]-str[i][k-1]*HH[n-k+1],1))return true;}else{size=0;int ss=k+m-1;ks=k;ke=ss;ans[0]=i;if(str[i][ss]-str[i][k-1]*HH[m]==str[8][m])return true;}}}return false;}int main(){int t;scanf("%d",&t);HH[0]=1;for(int i=1;i<=100000;i++)HH[i]=HH[i-1]*seed;while(t--){scanf("%d%d",&n,&m);for(int i=0;i<4;i++){scanf("%s",s+1);str[i*2][0]=0;str[i*2+1][0]=0;for(int j=1;j<=n;j++){str[i*2][j]=str[i*2][j-1]*seed+s[j]-'a'+1;str[i*2+1][j]=str[i*2+1][j-1]*seed+s[n-j+1]-'a'+1;}}str[8][0]=0;scanf("%s",s+1);for(int j=1;j<=m;j++){str[8][j]=str[8][j-1]*seed+s[j]-'a'+1;}if(solve()){if(size==1){for(int i=ks;i<=ke;i++){printf("%d%s",ans[0]/2*n+((ans[0]&1)?(n-i+1):i),i==ke?"\n":" ");}}else if(size==2){for(int i=ks;i<=n;i++){printf("%d ",ans[0]/2*n+((ans[0]&1)?(n-i+1):i));}for(int i=1;i<=ke;i++)printf("%d%s",ans[1]/2*n+((ans[1]&1)?(n-i+1):i),i==ke?"\n":" ");}else{for(int i=ks;i<=n;i++){printf("%d ",ans[0]/2*n+((ans[0]&1)?(n-i+1):i));}for(int i=1;i<=size-2;i++){for(int j=1;j<=n;j++){printf("%d ",ans[i]/2*n+((ans[i]&1)?(n-j+1):j));}}size--;for(int i=1;i<=ke;i++)printf("%d%s",ans[size]/2*n+((ans[size]&1)?(n-i+1):i),i==ke?"\n":" ");}}else{printf("No solution!\n");}}}
0 0
- [ZOJ 3817 Chinese Knot] 字符串hash+DP
- ZOJ 3817 Chinese Knot (字符串HASH)
- zoj 3817 Chinese Knot(hash+暴力)
- zoj 3817 Chinese Knot(hash+暴力)
- ZOJ 3817 Chinese Knot(牡丹江网络赛I题)
- KMP和扩展KMP ZOJ 3817 Chinese Knot
- zoj3817 Chinese Knot 字符串哈希
- ZOJ 3826(字符串hash)
- ZOJ 3826 hash+字符串模拟
- zoj 3479 Chinese Zodiac
- ZOJ 3479 Chinese Zodiac
- ZOJ 3479 Chinese Zodiac
- zoj-3479-Chinese Zodiac
- zoj 3533 Gao the String I(伸展树+字符串hash)
- [ZOJ 3807 Just a Palindrome] 字符串hash+二分
- zoj 1657 hash、、、
- zoj 2672 DP+hash
- zoj Gamblers(hash)
- __bridge,__bridge_transfer和__bridge_retained详解
- 好深v积分的深v好发的vhjdhvjjh电话vfdj
- 如何使用GitHub for Windows客户端
- knn(k邻近)分类器
- Python下调用Linux的Shell命令
- ZOJ 3817 Chinese Knot (字符串HASH)
- cc150:实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针
- 逆向输出一个数组(头尾交换,a[i]与a[n-i-1]交换,i<=(n-1)/2)
- Java编程:切面条
- extjs5 入门 遇到的bug
- 安卓调试模式下的运行会慢些
- python34gui编程
- 对于编程的朋友,每个人在学校里面都有一个故事
- ASP.NET MVC 实现全局 页面重定向