建议加强数据
查看原帖
建议加强数据
95027
schtonn楼主2021/7/18 13:24

我用 KMP 判断循环节加 O(n2)O(n^2) 暴力乱搞,一不小心就过了qwq,但是应该很容易就能卡掉:

300000
1 1 1 1 1 ...(299999个) 2

似乎原数据只有全是循环节和随机数据两种情况,所以我乱搞跑的还挺快

我的乱搞:

#include "bits/stdc++.h"
using namespace std;
int n,a[300010],ans;
int nxt[300010];
void kmp(){
	int i=0,j=-1;
	nxt[0]=-1;
	while(i<=n){
		if(j==-1||a[i]==a[j]){
			i++;
			j++;
			nxt[i]=j;
		}else j=nxt[j];
	}
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++)cin>>a[i];
	kmp();
	int t=1;
	if(n%(n-nxt[n])==0){
		t=n/(n-nxt[n]);
		n-=nxt[n];
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(a[(i+j)%n]>a[(ans+j)%n])break;
			if(a[(i+j)%n]<a[(ans+j)%n]){
				ans=i;
				break;
			}
		}
	}
	for(int p=0;p<t;p++){
		for(int i=0;i<n;i++){
			cout<<a[(i+ans)%n]<<' ';
		}
	}
	return 0;
}
2021/7/18 13:24
加载中...