全RE!!!
查看原帖
全RE!!!
796667
ZY_jiang楼主2024/7/14 11:13
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=10086;
ll sum1[N],sum2[N],n,m;
int vis[N],v[N];
ll len1,len2;
set <ll> s1;
set <ll> s2;
void init(){
	len1=len2=0;
	for(auto p:s1){
		sum1[++len1]=p;
	}
	for(auto p:s2){
		sum2[++len2]=p;
	}
	for(int i=1;i<=len1;i++){
		s1.erase(sum1[i]);
	}
	for(int i=1;i<=len2;i++){
		s2.erase(sum2[i]);
	}
	return ;
}
void ended(){
	for(int i=1;i<=len1;i++){
		if(vis[sum1[i]]==0) s1.insert(sum1[i]);
	}
	for(int i=1;i<=len2;i++){
		if(vis[sum2[i]]==0) s2.insert(sum2[i]);
	}
}
ll found(int id,ll sum){
	ll ans;
	if(id==1){
		ll l=0,r=len1,mid;
		while(l<=r){
			mid=(l+r)/2;
			if(sum1[mid]>=sum){
				ans=mid;
				r=mid-1;
			}
			else l=mid+1;
		}
		return sum1[ans];
	}
	else{
		ll l=0,r=len2,mid;
		while(l<=r){
			mid=(l+r)/2;
			if(sum2[mid]>=sum){
				ans=mid;
				r=mid-1;
			}
			else l=mid+1;
		}
		return sum2[ans];
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>m;
		if(m==1){
			len1++;
			s1.insert(i);
		} 
		else{
			len2++;
			s2.insert(i);
		}
	}
	while(len1!=0&&len2!=0){
		init();
		memset(vis,0,sizeof vis);
		int id;
		if(sum1[1]<sum2[1]){
			ll cnt=sum1[1];
			id=1;
			while(true){
				if(v[cnt]==0) cout<<cnt<<" ";
				vis[cnt]=1;
				v[cnt]=1;
				if(id==1) id=0;
				else id=1;
				ll leg=found(id,cnt);
				if(leg<=cnt) break;
				cnt=leg;
			}
		}
		else{
			ll cnt=sum2[1];
			id=0;
			while(true){
				if(v[cnt]==0) cout<<cnt<<" ";
				vis[cnt]=1;
				v[cnt]=1;
				if(id==1) id=0;
				else id=1;
				ll leg=found(id,cnt);
				if(leg<=cnt) break;
				cnt=leg;
			}
		}
		cout<<endl;
		ended();
	}
	if(s1.size()!=0){
		for(auto p:s1){
			cout<<p<<endl;
		}
	}
	if(s2.size()!=0){
		for(auto p:s2){
			cout<<p<<endl;
		}
	}
	return 0;
}
2024/7/14 11:13
加载中...