hdu3374解题报告
hdu3374
Solution:
最小表示法+KMP
设一个字符串S的最小循环节是T。(如S=“abababab”,则T=“ab”)
在最小循环节T中,只有1个最小字符串和最大字符串。则最小字符串的个数和最大字符串的个数相等,为|S|/|T|。
证明:
假设不成立,即在最小循环节T(T[0],T[1],...,T[m-1])[|T|=m]中,假设不止1个最小字符串。设其中两个为
T[x],T[(x+1)%m],…,T[(x-1)%m]
T[y],T[(y+1)%m],…,T[(y-1)%m]
两者相等。设z=y-x。对任意i,T[i]=T[(i+z)%m]=T[(i+z*2)%m]=...
对于z*p-m*q=r(p,q为整数),当z和m的最大公约数g=gcd(z,m)能整除r时,方程有解,即当r=k*gcd(z,m)(k为整数)时,方程有解。
因为y-x<m,所以gcd(z,m)小于m,且gcd(z,m)能被m整除。
对于任意i:
T[i]=T[(i+z*p)%m]=T[(i+g+m*q)%m]=T[(i+g)%m]=T[(i+g*2)%m]=...
所以
T[i]~T[(i+g-1)%m] ; T[(i+g)%m]~ T[(i+g*2-1)%m] ; ... ; T[(i+(m/g-1)*g)%m]~T[(i-1)%m] 为T的循环节,与上述T为最小循环节矛盾
所以假设不成立,最小循环节T中只有一个最小字符串
同理,最小循环节T中只有一个最大字符串
各种样例:
ababab
bababa
abcabcabc
acbacbacb
bacbacbac
bcabcabca
cabcabcab
cbacbacba
程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max_len 1000000 char str[],str1[];
long pre[]; long max(long a,long b)
{
if (a>b)
return a;
else
return b;
} long min(long a,long b)
{
if (a>b)
return b;
else
return a;
} int main()
{
long i,j,k,len,len1,posl,posr,count;
while (scanf("%s",str)!=EOF)
{
len=strlen(str);
//min
i=;
j=;
while (i<len && j<len)
{
for (k=;k<len;k++)
if (str[(i+k)%len]!=str[(j+k)%len])
break;
if (k==len)
break;
if (str[(i+k)%len]>str[(j+k)%len])
i=max(i+k+,j+);
else
j=max(j+k+,i+);
}
posl=min(i,j); //max
i=;
j=;
while (i<len && j<len)
{
for (k=;k<len;k++)
if (str[(i+k)%len]!=str[(j+k)%len])
break;
if (k==len)
break;
if (str[(i+k)%len]<str[(j+k)%len])
i=max(i+k+,j+);
else
j=max(j+k+,i+);
}
posr=min(i,j);
//最小字符串(模式串) len
for (i=;i<len;i++)
str1[i]=str[(posl+i)%len];
//(目标串) 2*len
for (i=;i<len-;i++)
str[i+len]=str[i];
len1=len*-;
str[len1]='\0'; j=-;
pre[]=-;
//第0个数的前继为-1(第0个数前面没有数,-1代表没有)
//从而i初始取1,否则i初始取0时,pre[0]=0,错误
for (i=;i<len;i++)
{
while (j>- && str1[j+]!=str1[i])
j=pre[j];
if (str1[j+]==str1[i])
j++;
pre[i]=j;
} count=;
j=-;
for (i=;i<len1;i++)
{
while (j>- && str1[j+]!=str[i])
j=pre[j];
if (str1[j+]==str[i])
j++;
if (j==len-)
{
count++;
j=pre[j];
}
}
//最小串和最大串的数目相等
printf("%ld %ld %ld %ld\n",posl+,count,posr+,count);
}
return ;
}
hdu3374解题报告的更多相关文章
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- 实践:IIS7下访问ashx页面,显示404
问题描述 1.路径什么的都对,这方面的原因就不要想了 2.在我的电脑上可以,在同事的电脑上不可以 方案1:未注册ashx的处理应用程序 也就是不知道IIS不知道用什么应用程序处理ashx文件,解决办法 ...
- kvm虚拟化一: 图形化的管理方式
1.安装必要工具yum install -y / qemu-kvm //kvm主程序 libvirt //虚拟化服务库 libguestfs-tools //虚拟机系统管理工具 virt-instal ...
- P2463 [SDOI2008]Sandy的卡片
写一种\(O(nm)\)的做法,也就是\(O(\sum 串长)\)的. 先通过差分转化,把每个数变成这个数与上一个数的差,第一个数去掉,答案就是最长公共子串+1 按照套路把所有串拼起来,中间加一个分隔 ...
- 工具神器推荐 Vox 和 search everything
工具神器推荐 Vox 和 search everything vox官网: http://www.wox.one/
- 软件工程第三次作业(One who wants to wear the crown, Bears the crown.)
最大连续子数组和 题目 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时定义子段和 ...
- docker之镜像管理命令
一.docker image 镜像管理命令 指令 描述ls 列出本机镜像build 构建镜像来自Dockerfilehistory 查看镜像历史inspect 显示一个或多个镜像详细信息pull 从镜 ...
- 关于最近996.icu的一点感想
最近这个996.ICU的话题讨论的火热,特别是一些业界大佬有直言不讳的说就是要996,有的弄些鸡汤文把996说成年轻人就该这样的.作为一个普通的码农,实在是看不下去了,在这里说些自己的看法,希望年轻人 ...
- 转载别人的一篇关于git的文章
转载网址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- webug4.0安装
官网:https://www.webug.org/ 官方版本里安装视频教程 4.26 官网打不开,分享当初存在网盘的 链接:https://pan.baidu.com/s/13rG0TLwuA3Ro0 ...
- UI Recorder 功能详解
前言: UI Recorder安装教程见:UI Recorder 安装教程(一).UI Recorder 安装教程(二) 本次着重介绍UI Recorder录制过程中的功能按钮:添加悬停,添加断言,使 ...