对于这份代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ull unsigned long long
#define pii pair<int,int>
#define ls root << 1
#define rs root << 1 | 1
#define mid ((l + r) >> 1)
const int MAX = 3e5 + 5;
const int mod = 998244353;
const int INF = 0x7fffffff;
int a[MAX],n;
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
int i=1,j=2,k=0;
while(i+k<=n&&j+k<=n)
{
if(a[i+k]==a[j+k]) k++;
else
{
if(a[i+k]>a[j+k]) i+=k+1;
else j+=k+1;
if(i==j) i++;
k=0;
}
}
int res=min(i,j);
for(i=1;i<=n;i++)
printf("%lld ",a[(res+i-2)%n+1]);
return 0;
}
in:
4
2 1 3 1
ans:
1 2 1 3
out:
1 3 1 2
没有判与前面匹配的情况也能 AC。因为这个以前这么写过了但是现在看看不懂了