HDU3374

题目链接:HDU3374

题意:给出一个字符串,依次左移一个单位形成一堆字符串,求其字典序最小和最大的字符串需要左移多少位,以及一共有几个这样的字符串。

题目分析:首先可以确定两个字符串出现的次数应该相同。由于假设最小的左移m位得到最大的话,那么所有相同的最小字符串左移m位都会得到最大串。对于求解最小最大串的位置可以用最小最大表示法。

最大最小表示法:总的来说就是这道题的模板,求一个循环串字典序的最小和最大的位置。算法整体思想很简单,以最小为例如题,指针i,j分别代表比较的两个串的串首位置,这两个位置是互相更新的。当s[i+k]==s[j+k]时,k++,当s[i+k]

#include 
#include
#include
#include
#define N 1000004
using namespace std;
char s[N];
int nexts[N];
int len,sum;
void getnext()
{
    int i=0,j=-1;
    nexts[0]=-1;
    while(i


你可能感兴趣的:(ACM)