解法:

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

  然后用最小表示的第二个串和第一个串做两次扩展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. 网页制作常用的CSS知识

    在制作网页中,我们会用到很多CSS的知识,在这里我简单的总结了一些. div    划分区块 ul,li 无序列表(配合划分区块) ol,li 有序列表 a 超链接标签 p 段落标签 h 标题标签 i ...

  2. git 出现 The current branch is not configured for pull No value for key branch.master.merge found in configuration

    以下是我在网上找到的不错的文章,我参考后已解决我的问题: http://my.oschina.net/robinsonlu/blog/144085 http://www.cnblogs.com/zha ...

  3. 手机信号强度单位:dBm 和 asu

    介绍 首先明确:dBm 和 asu 是两个独立的单位,它们的换算关系不唯一. 在 2G 网络下:dBm = -113+2*asu在 4G 网络下:dBm = -140+asu dBm 和 asu 都用 ...

  4. Mac OS 使用asio库

    下载地址:http://sourceforge.net/projects/asio/files/asio/1.12.2%20%28Stable%29/ 本人下载的版本:asio-1.12.2 1,本人 ...

  5. 常见的HTTP相应状态码

    200:请求被正常处理204:请求被受理但没有资源可以返回206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源.301:永 ...

  6. 实训day01 python基础

    一.编程语言 编程语言:可以被计算机所识别的表达方式. 编程:程序员通过编程语言将自己的想法编写出来,产生的结果就是包含字符的文件. 其中,只有程序在运行时,其中的字符才有特定的语法意义. 二.计算机 ...

  7. 允许IIS下载无后缀文件及“请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。”的解决方法

    1)增加MIME类型 ,如下 application/octet-stream 2)注意是"." , ".*"则适用于任何有文件后缀时使用,无后缀请不要加*

  8. 多线程之Java中的等待唤醒机制

    多线程的问题中的经典问题是生产者和消费者的问题,就是如何让线程有序的进行执行,获取CPU执行时间片的过程是随机的,如何能够让线程有序的进行,Java中提供了等待唤醒机制很好的解决了这个问题! 生产者消 ...

  9. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  10. PHP实现微信第三方登录的方法

    本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请 一开始你需要进入微信公 ...