SGU 439 A Secret Book
解法:
对于第二个串,循环移动能得到的字典序最小的串,可以直接用最小表示法搞定。
然后用最小表示的第二个串和第一个串做两次扩展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的更多相关文章
- sgu Theodore Roosevelt【判断点是否在凸多边形内模板】
链接: http://acm.sgu.ru/problem.php?contest=0&problem=253 http://acm.hust.edu.cn/vjudge/contest/vi ...
- Android Secret Code
我们很多人应该都做过这样的操作,打开拨号键盘输入*#*#4636#*#*等字符就会弹出一个界面显示手机相关的一些信息,这个功能在Android中被称为android secret code,除了这些系 ...
- ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成
在 ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是: 1) System.Security.Crypt ...
- Lucky 2048 - The secret of being lucky
Lucky 2048 uses a normal distribution to create "lucky" start. Generally speaking, it prov ...
- Secret Codes
Secret Codes This is a list of codes that can be entered into the dialer to output the listed info ...
- 微信企业号开发之-如何获取secret 序列号
最近有项目基于微信企业号开发,简单记录下如何查看企业号secert 工具/原料 微信企业号 方法/步骤 用管理员的帐号登录后,选择[设置]-[权限管理]进入管理组设置界面 在左边点击[ ...
- SGU 495. Kids and Prizes
水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...
- hdu.1111.Secret Code(dfs + 秦九韶算法)
Secret Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 2078 Problem H Secret Message 中石油-未提交-->已提交
题目描述 Jack and Jill developed a special encryption method, so they can enjoy conversations without wo ...
随机推荐
- InChatter系统开源聊天模块前奏曲
最近在研究WCF,又因为工作中的项目需要,要为现有的系统增加一个聊天模块以及系统消息提醒等,因此就使用WCF做服务器端开发了一个简单的系统. 开发最初学习了东邪孤独大哥的<传说的WCF系列> ...
- (三)Redis for StackExchange.Redis
目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis StackExchange.Re ...
- Vue 数组和对象更新,但是页面没有刷新
在使用数组的时候,数组内部数据发生改变,但是与数组绑定的页面的数据却没有发生变化. <ul> <li v-for="(item,index) in todos" ...
- Duplicate fragment name ERROR Jetty Maven Plugin
http://stackoverflow.com/questions/5802096/duplicate-fragment-name-error-jetty-maven-plugin 4down vo ...
- Python机器学习——DBSCAN聚类
密度聚类(Density-based Clustering)假设聚类结构能够通过样本分布的紧密程度来确定.DBSCAN是常用的密度聚类算法,它通过一组邻域参数(ϵϵ,MinPtsMinPts)来描述样 ...
- Android首页轮播图直接拿来用
import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import jav ...
- jenkins构建项目记录1
jenkins安装见上篇随笔 1.新建任务 2.构建一个自由风格的软件项目 3.源码管理设置 4.构建环境 5.构建 6.构建后操作
- http2提升效率的几个点
1.二进制传输,消息的解析效率更高 2.头部数据压缩,传输效率更高 3.多路复用,可以让请求并发执行 4.服务器推送,可以主动推送数据到浏览器 http2加载图片demo:https://http2. ...
- 树莓派 -- i2c学习
硬件平台 RaspberryPi-3B+ Pioneer600外扩版 i2c芯片为DS3231,adddress 0x68 首先来看一下i2ctool的使用 i2ctool 使用 https://i2 ...
- python第一章计算机基础
第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 / 显示器 等组成,只有硬件但硬件之间无法进行交流和通信. 1.2 操作系统 操作系统用 ...