发挥人类智慧,写的超级无敌旋转STL TLE4个点,RE最后一个点,悬3关
查看原帖
发挥人类智慧,写的超级无敌旋转STL TLE4个点,RE最后一个点,悬3关
1063855
xu_zhihao楼主2024/7/1 23:06

求调!!!!!

#include<bits/stdc++.h>
using namespace std;
struct node{
	list<int>lt;
	int id;
}; 
queue<node>q;
int len=1;
int a[200010];
vector<int>v[200010];
int main(){
	//freopen("C:\\Users\\Administrator\\Desktop\\P7912_5.in","r",stdin);
	//freopen("C:\\Users\\Administrator\\Desktop\\P7912_5.out","w",stdout);
	int n;
	scanf("%d",&n);
	int cnt=1;
	list<int>lt;
	int mn=1e9;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		if(i==1 || a[i]==a[i-1]){
			lt.push_back(i);
			len++;
		}
		else{
			q.push({lt,a[i-1]});
			lt.clear();
			mn=min(mn,len);
			lt.push_back(i);
		    len=1;
		}
	}
	if(len){
		mn=min(mn,len);
		q.push({lt,a[n]});
		cnt++;
    }
	lt.clear();
	while(!q.empty()){
		int op=0;
		int f=0;
		int ou=0;
		deque<node>m;
		while(!q.empty()){	
			auto p=(q.front()).lt;
			int id=(q.front()).id;
			q.pop();
			op++;
			for(int i=0;i<mn;i++){
				v[i].push_back(p.front());
				p.pop_front();
			}
			len=p.size();
			if(f && m.empty()){
				f=0;
			}
			if(f && p.size() && ou!=id){
				auto y=(m.back()).lt;m.pop_back();
				y.splice(y.end(),p);
				m.push_back({y,id});
				f=0;
				continue;
			}
			else if(f && p.size()){
				f=0;
			}
			if(!len && !f){
				f=1;
				ou=id;
				continue;
			}
			if(len){
				m.push_back({p,id});
			}
		}
		for(int i=0;i<mn;i++){
			for(int j=0;j<op;j++){
				printf("%d ",v[i][j]);
			}
			printf("\n");
			v[i].clear();
		}
		while(!m.empty()){
			auto p=m.front();m.pop_front();
			len=(p.lt).size();
			mn=min(len,mn);
			q.push(p);
		}
	}
}
2024/7/1 23:06
加载中...