我是靠谱客的博主 朴素人生,最近开发中收集的这篇文章主要介绍牛客网暑期多校第三场 E Sort String(最小循环节)牛客网暑期多校训练赛第三场 E题 Sort String ,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
牛客网暑期多校训练赛第三场 E题 Sort String
题意:
给了一个字符串,Si是由下标i到字符串末尾加上0到i-1组成的字符串,只有当字符串Si和Sj是相同的才算是在一组,问字符串可以分成多少组并按字典序最小的输出每组中的i下标。
思路:
就是求最小循环节
输入
abab
输出
2
2 0 2
2 1 3
输入
deadbeef
输出
8
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
int nex[maxn];
char s[maxn];
void getnext(char s[], int nex[],int len)
{
int j = 0, k = -1;
nex[0] = -1;
while(j < len)
{
while(k != -1 && s[j] != s[k])
k = nex[k];
nex[++j] = ++k;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> s;
int n = strlen(s);
getnext(s,nex,n);
int len = n - nex[n];
if(n % len)
{
cout << n << 'n';
for(int i = 0;i < n;i ++)
cout << 1 << " " << i << 'n';
}
else
{
cout << len << 'n';
for(int i = 0;i < len;i ++)
{
cout << n / len;
for(int j = i;j < n;j += len)
cout << " " << j;
cout << 'n';
}
}
return 0;
}
最后
以上就是朴素人生为你收集整理的牛客网暑期多校第三场 E Sort String(最小循环节)牛客网暑期多校训练赛第三场 E题 Sort String 的全部内容,希望文章能够帮你解决牛客网暑期多校第三场 E Sort String(最小循环节)牛客网暑期多校训练赛第三场 E题 Sort String 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复