BZOJ 1398: Vijos1382寻找主人 Necklace【字符串最小表示
2016-09-09 11:04
260 查看
第一次写最小表示法,纪念一下233333【虽然clj聚聚说用SAM做也不错虽然大概可能常数大了一点
反正直接求两个字符串的最小表示再check一下就好了
反正直接求两个字符串的最小表示再check一下就好了
#include<bits/stdc++.h> #define MAXN 1000057 using namespace std; int n,n2; char a[MAXN<<1],b[MAXN<<1]; char c[MAXN]; int calc(char *s){ int i,j,k; for(i=0,j=1,k=0;i<n2&&j<n2;k=0){ while(s[i+k]==s[j+k]&&k<n2) ++k; if(k==n2) break; if(s[i+k]>s[j+k]) i+=k+1; else j+=k+1; if(i==j) ++i; } return min(i,j); } int main(){ scanf("%s%s",a,b); n=strlen(a); for(int i=0;i<n;++i) a[i+n]=a[i],b[i+n]=b[i]; a[n<<1]=b[n<<1]='\0'; n=strlen(a); n2=n>>1; int id_a=calc(a),id_b=calc(b); for(int i=id_a,j=id_b;i<id_a+n2&&j<id_b+n2;++i,++j) if(a[i]!=b[j]) return puts("No"),0; puts("Yes"); for(int i=id_a;i<id_a+n2;++i) putchar(a[i]); return 0; }
相关文章推荐
- BZOJ 1398: Vijos1382寻找主人 Necklace 字符串最小表示法
- BZOJ 1398: Vijos1382寻找主人 Necklace 最小表示法
- 【BZOJ 1398】 1398: Vijos1382寻找主人 Necklace (最小表示法)
- bzoj1398: Vijos1382寻找主人 Necklace
- 【bzoj1398】Vijos1382寻找主人 Necklace 最小表示法
- 【Vijos1382】【BZOJ1398】寻找主人 Necklace
- bzoj 1398: Vijos1382寻找主人 Necklace (后缀自动机)
- bzoj 1398: 寻找主人 AC自动机+最小表示法
- 【bzoj1398】【寻找主人】【最小表示法】
- 【bzoj1398】Vijos1382寻找主人 Necklace
- [BZOJ1398] Vijos1382寻找主人 Necklace
- VIJOS1382寻找主人(Necklace) 最小表示法
- bzoj1398: Vijos1382寻找主人 Necklace
- bzoj1398 Vijos1382寻找主人 Necklace
- 【最小表示法】BZOJ1398-寻找朋友
- 【BZOJ2882】【字符串的最小表示】工艺
- Vijos 有根树的同构问题【字符串---最小表示法】
- bzoj1398 寻找主人
- [BZOJ1398]-最小表示法模板题
- bzoj 2176: Strange string 字符串最小表示法