建议加强数据,暴力+优化轻松水过。
查看原帖
建议加强数据,暴力+优化轻松水过。
658786
STUDENT00楼主2022/11/17 21:53

奇奇怪怪的优化,可以秒降时间复杂度:

#include<bits/stdc++.h>
using namespace std;
int n,t[1000010],in[1000010],ed[1000010];
char c[1000010];
bool cmp(int a,int b){
	if(in[a]==in[b]){
		int mins=ed[in[a]]-max(a,b);
		a+=mins;
		b+=mins;
	}
	while(a<n&&b<n&&c[a]==c[b]){a++;b++;}
	if(a>=n) return 1;
	if(b>=n) return 0;
	return c[a]<c[b]; 
}
int main(){
	scanf("%s",c);
	n=strlen(c);
	int tot=1;
	in[0]=1;
	for(int i=1;i<n;i++){
		if(c[i]!=c[i-1]){
			ed[tot]=i-1;
			tot++;
		}
		in[i]=tot;
	}
	ed[tot]=n-1;
	for(int i=0;i<n;i++) t[i]=i;
	sort(t,t+n,cmp);
	for(int i=0;i<n;i++) printf("%d ",t[i]+1);
	return 0;
}
2022/11/17 21:53
加载中...