题意:

给出两个同样长度的数字串;

求两个串是否本质同样。同样则输出最小表示。

长度L似乎给的不正确,大概是2000000左右吧;

题解:

最小表示法裸题。证明正确性啥的详见论文吧;

这东西大体的思路就是两个指针扫。

同样则累加k,不同就向后跳k+1个。

由于前面那段同样所以就能够由还有一个指针去扫,来节约时间。

O(n)这个非常显然咯。就一个for循环(笑)。

而且每一个数都在+++不像kmp还会由next数组回退。

模板别敲错,更别忘了。。

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 2100000
using namespace std;
char a[N<<1],b[N<<1];
int len;
int slove(char *s)
{
int i,j,k,cmp;
for(i=1,j=2,k=0;i<=len&&j<=len&&k<=len;)
{
cmp=s[i+k]-s[j+k];
if(!cmp) k++;
else
{
if(cmp>0) i+=k+1;
else j+=k+1;
if(i==j) j++;
k=0;
}
}
return min(i,j);
}
int main()
{
int i,j,k,s1,s2;
scanf("%s%s",a+1,b+1);
len=strlen(a+1);
memcpy(a+len+1,a+1,sizeof(int)*len);
memcpy(b+len+1,b+1,sizeof(int)*len);
s1=slove(a);
s2=slove(b);
for(i=s1,j=s2,k=1;i<s1+len;i++,j++)
if(a[i]!=b[j])
k=0;
if(!k) puts("No");
else
{
puts("Yes");
a[s1+len]='\0';
puts(a+s1);
}
return 0;
}

最新文章

  1. [field:picname/]和[field:litpic/]区别
  2. CSS背景图像位置属性background-position百分比详解
  3. C++ 支持两种索引的排行榜模板
  4. C阶段【01】 - C基础
  5. Div中高度自适应增长方法
  6. [水煮 ASP.NET Web API 2 方法论] 目 录
  7. Windows注册表(持续更新)
  8. HDU-- Buy Tickets
  9. JAVA 内存泄露的理解
  10. 给小班讲stl 之 map、sort、优先队列
  11. JavaScript 进阶(四)解密闭包closure
  12. SDN理解:目录
  13. 用IDEA生成javadoc文档
  14. python--ftp服务器(pyftpdlib)
  15. xgboost 参数调优指南
  16. MySQL——修改数据库远程权限
  17. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-3禁止交换和禁用大页面
  18. cobbler自动装机服务简介与配置
  19. 使用js切割URL的参数
  20. zabbix使用percona插件监控mysql

热门文章

  1. Cocos2d-x学习资源集锦+有奖抽楼活动
  2. c++中字符输入函数getline、cin.getline区分
  3. Spark SQL Catalyst源代码分析之Analyzer
  4. [SCOI 2005] 栅栏
  5. 云:VMware
  6. jQuery插件开发的两种方法
  7. Qt-窗口部件概念介绍
  8. Tomcat转jboss踩的那些坑
  9. windows 2008 中IIS7.0以上如何设置404错误页面
  10. 动态库连接器–动态库链接信息(Mach-O文件格式和程序从加载到执行过程)