解法:

  对于第二个串,循环移动能得到的字典序最小的串,可以直接用最小表示法搞定。

  然后用最小表示的第二个串和第一个串做两次扩展KMP,一次正常求,另外一次将两个串都反转一下,然后扫一遍ex[]数组

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = (int)2e6+;
char a[N],b[N],c[N];
int next[N],exa[N],exb[N];
void getnext(char *s){
int len = strlen(s),cur = ;
next[] = len;
while(cur < len&&s[cur]==s[cur+])cur++;
next[] = cur;cur = ;
for(int k = ;k<len;k++){
int p = cur + next[cur] - ,L = next[k-cur];
if(k + L - >= p){
int j = (p-k+)>?(p-k+):;
while(k+j<len&&s[k+j]==s[j])j++;
next[k] = j;
cur = k;
}else
next[k] = L;
}
}
void exkmp(char *s1,char *s2,int *ex){
getnext(s2);
int l1 = strlen(s1),l2 = strlen(s2),cur = ;
while(cur < min(l1,l2)&&s1[cur]==s2[cur])cur++;
ex[] = cur;cur = ;
for(int k = ;k < l1;k++){
int p = cur + ex[cur] - ,L = next[k-cur];
if(k + L - >= p){
int j = (p-k+)>?(p-k+):;
while(k+j<l1&&j<l2&&s1[k+j]==s2[j])j++;
ex[k] = j;
cur = k;
}else
ex[k] = L;
}
}
int MinRep(char *s){
int i = ,j = ,k = ,t,len = strlen(s);
while(i<len&&j<len&&k<len){
t = s[(i+k)%len] - s[(j+k)%len];
if(t==)k++;
else{
if(t>)
i += k + ;
else
j += k + ;
if(i==j)j++;
k = ;
}
}
return min(i,j);
}
inline int dis(int now,int sz){
return min(now,sz-now-);
}
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
scanf("%s%s",a,b);
int start = MinRep(b);
for(int i = ,j = start;i < m;i++,j = (j+)%m)c[i] = b[j];c[m] = ;
for(int i = n;i < n+n;i++)a[i] = a[i-n];a[n+n] = ;
exkmp(a,c,exa);
reverse(a,a+*n);reverse(c,c+m);
exkmp(a,c,exb);
reverse(exb,exb+n*);
reverse(c,c+m);
reverse(a,a+*n);
int ans = -;
for(int i = ;i < n;i++)
if(exa[i] == m || exa[i] + exb[i+m-] == m-){
if(ans==-)ans = i;
else if(dis(i,n)<dis(ans,n))ans = i;
}
puts(c);
for(int i = ,j = ans;i < n;i++,j = (j+)%n)putchar(a[j]);puts("");
}
return ;
}

SGU 439 A Secret Book的更多相关文章

  1. sgu Theodore Roosevelt【判断点是否在凸多边形内模板】

    链接: http://acm.sgu.ru/problem.php?contest=0&problem=253 http://acm.hust.edu.cn/vjudge/contest/vi ...

  2. Android Secret Code

    我们很多人应该都做过这样的操作,打开拨号键盘输入*#*#4636#*#*等字符就会弹出一个界面显示手机相关的一些信息,这个功能在Android中被称为android secret code,除了这些系 ...

  3. ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成

    在 ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是: 1) System.Security.Crypt ...

  4. Lucky 2048 - The secret of being lucky

    Lucky 2048 uses a normal distribution to create "lucky" start. Generally speaking, it prov ...

  5. Secret Codes

    Secret Codes   This is a list of codes that can be entered into the dialer to output the listed info ...

  6. 微信企业号开发之-如何获取secret 序列号

    最近有项目基于微信企业号开发,简单记录下如何查看企业号secert 工具/原料 微信企业号   方法/步骤  用管理员的帐号登录后,选择[设置]-[权限管理]进入管理组设置界面      在左边点击[ ...

  7. SGU 495. Kids and Prizes

    水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...

  8. hdu.1111.Secret Code(dfs + 秦九韶算法)

    Secret Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  9. 2078 Problem H Secret Message 中石油-未提交-->已提交

    题目描述 Jack and Jill developed a special encryption method, so they can enjoy conversations without wo ...

随机推荐

  1. 契约式设计(DbC)感想(二)

    契约式设计6大原则的理解 在<Design by Contract原则与实践>中,作者定义了契约式设计的6大原则: 区分命令和查询: 将基本查询和派生查询区分开: 针对每个派生查询,设定一 ...

  2. SQL Server 零散笔记

    排序显示行号 select Row_Number() over(order by Code) as RowNumber,ID,Code,Name from CBO_ItemMaster 不排序显示行号 ...

  3. sh NonUniqueObjectException

    话题引入: 使用hibernate进行更新操作时,首先调用了findById方法获取要修改的对象,此时session没有被关闭,接着重新创建一个对象,将要修改的属性值赋值给这个对象.调用修改方法抛出如 ...

  4. ALTER USER - 改变数据库用户帐号

    SYNOPSIS ALTER USER name [ [ WITH ] option [ ... ] ] where option can be: [ ENCRYPTED | UNENCRYPTED ...

  5. 【软件构造】(转)Java中的comparable和comparator

    为了方便阅读和复习,转载至此,原地址:温布利往事的博客 阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Co ...

  6. 16.04 下 ufw 防火墙的的开启、禁用、开放端口、关闭端口

    16.04 下的 ufw 防火墙相关操作使用ufw命令.通过ufw --help可以查看所有相关命令. 打开防火墙 sudo ufw enable 重启防火墙 sudo ufw reload 打开指定 ...

  7. DHCP和PXE

    继续学习,Let's go!DHCP和PXE都是什么呢?如果非科班出身,可能一脸懵逼,好多东西需要去学习了,真的,继续学吧,付出不一定会有回报,不付出肯定就是等死了,呵呵! 一.DHCP 真正需要手动 ...

  8. pycharm debug后会出现 step over /step into/step into my code /force step into /step out 分别表示

    1.debug,全部打印 2.打断点debug,出现单步调试等按钮,只运行断点前 3.setup over 调试一行代码 4.setup out 运行断点后面所有代码 5.debug窗口显示调试按钮 ...

  9. PyTorch: 序列到序列模型(Seq2Seq)实现机器翻译实战

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢!http://blog.csdn.net/m0_37306360/article/details/79318644简介在这个项目中,我们将使 ...

  10. 指针函数(Pointer Function)和函数指针(Pointer to Function或Function Pointer)

    一.指针函数 1.解释:指针函数很好理解:简单来说,就是一个返回指针的函数,本质是一个函数.如: int fun(int x,int y);    //这是一个普通函数的声明,返回值是一个int类型, ...