解法:

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

  然后用最小表示的第二个串和第一个串做两次扩展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. A/B宣言

    作者:Dunne & Raby A B 肯定的  批判的 解决问题的 发现问题的 设计即流程 设计即方法 给出答案 问问题 为行业中服务 为社会服务 说明世界是怎样的 说明世界可能是怎样的 科 ...

  2. SQL Server 零散笔记

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

  3. 关于js中使用close方法无法关闭firefox浏览器

    今天遇到一个问题就是在js中使用window.close()方法无法关闭Firefox: 浏览器版本: firefox

  4. Flutter web环境变量搭建及开发

    使用flutter开发app已有三个月,有一些行为形成了惯性,在搭建flutter web环境变量时走了不少的坑,分享出来,免得其他小伙伴再走一遍. 首先flutter的版本要使用1.5及以上版本 d ...

  5. java将很长的一条sql语句,自动换行输出(修改版)2019-06-01(bug未修复)

    package org.jimmy.autosearch2019.test; import java.util.HashMap; public class AutoLinefeedSql { publ ...

  6. 在mac下做web开发,shell常用的快捷键

    Ctrl + A 光标移动到行首 Ctrl + E 光标移动到行末 Ctrl + K 清屏(也可是用clear命令) Command +shift+{} 终端的tab左右切换

  7. JVM内存管理及垃圾回收机制

    一.JVM内存组成结构 JVM栈由堆.栈.本地方法栈.方法区等部分组成,结构图如下所示:  二.JVM内存回收 Sun的JVMGenerationalCollecting(垃圾回收)原理是这样的:把对 ...

  8. MFC定时器的使用

    巧妙地使用定时器能达到意想不到的效果,写界面的时候能实现渐变,也能帮助多线程控制等我们知道,在VC的MFC中,已经为我们封装好了很多全面和强大的函数集,所以在MFC编程时,巧妙地调用MFC函数库可以为 ...

  9. 向数据库添加中文数据乱码的解决办法(本文使用spring-jdbcTemplate)

    由于编码字符集的不同通常容易导致数据库中文乱码问题,如显示问号. 往往由以下三个方面所造成的 (一):数据库端字符集设置 1.安装mysql时,会有一个数据库编码设置,将其设置为utf-8 2.先设置 ...

  10. 简单说一下Set,list,Map的类型和自己的特点

    首先是Set,List,Map Set和list都是继承了Conllection接口,而Map是本身就是一个接口 set是最简单的一种集合,没有重复对象 set接口主要有两个实现: 1,hashSet ...