#include <bits/stdc++.h>
using namespace std;
static auto speedup = [](){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return nullptr;}();
const int maxn = 3e5 + 7;
int n,a[maxn];
int getMiniNotationOn2(){
int i = 0,j = 1,k = 0;
while(k <= n && i < n && j < n){
if(a[(i + k) % n] == a[(j + k) % n]){
k++;
}else {
if(a[(i + k) % n] > a[(j + k) % n])i++;
else j++;
k = 0;
if(i == j)i++;
}
}
i = min(i,j);
return i;
}
int getMiniNotationOn(){
int i = 0,j = 1,k = 0;
while(k <= n && i < n && j < n){
if(a[(i + k) % n] == a[(j + k) % n]){
k++;
}else {
a[(i + k) % n] > a[(j + k) % n]?i = i + k + 1:j = j + k + 1;
if(i == j)i++;
k = 0;
}
}
i = min(i,j);
return i;
}
void slove(){
cin >> n;
for(int i = 0;i < n;i++){
cin >> a[i];
}
int first = 0;
first = getMiniNotationOn2();
//first = getMiniNotationOn();
for(int i = 0;i < n;i++){
cout << a[(i + first) % n] << " ";
}
cout << endl;
}
int main(){
slove();
return 0;
}
最小表示法
最新推荐文章于 2025-12-02 21:05:32 发布
文章详细介绍了如何在C++中使用循环结构实现两个不同版本的函数,用于找到数组中符号序列的最小长度。通过getMiniNotationOn2()和getMiniNotationOn()方法,程序读取输入数组并输出按特定规则重排后的序列。
1302

被折叠的 条评论
为什么被折叠?



