救,玄关
查看原帖
救,玄关
1367434
x2401002楼主2024/11/11 21:19

(样例没过)

#include<bits/stdc++.h>//1 代表苹果,0 代表桔子。
#define ll long long
using namespace std;
const ll maxn = 2*10e5+100;
struct node{
	ll x,ai;
};
ll n,flag1,flag2,res1=1,res2=1,res3 = 1;
node a[maxn],b[maxn],c[maxn],d[maxn];
queue<node>p;
queue<node>j;
bool cmp(node y,node z){
	return y.x<z.x;
}
int main(){
	cin>>n;
	for(int i = 1;i<=n;i++){
		cin>>a[i].ai;
		a[i].x = i;
	}
	for(int i = 1;i<=n;i++){
		if(a[i].ai==1){
			if(flag1==0){
				flag1 = 1;
				p.push(a[i]);
			}
			else if(flag1==1){
				p.push(a[i]);
			}
			if(a[i].ai==1&&flag2==1){
				j.push(a[i]);
				flag2 = 0;
			}	
		}
		if(a[i].ai==2){
			if(flag2==0){
				flag2 = 1;
				j.push(a[i]);
			}
			else if(flag2==1){
				j.push(a[i]);
			}
			if(a[i].ai==2&&flag1==1){
				p.push(a[i]);
				flag1 = 0;
			}	
		}
	}
	flag1 = 0,flag2 = 0;
	while(!p.empty()||!j.empty()){
		res1 = 0,res2 = 0,res3 = 0;
		while(!p.empty()){
			if(p.front().ai==1&&flag1==0){
				d[res3] = p.front();
				res3++;
				p.pop();
				flag1 = 1;
				continue;
			}
			if(p.front().ai==0){
				flag1 = 0;
			}
			b[res1] = p.front();
			res1++;
			p.pop();
		}
		while(!j.empty()){
			if(j.front().ai==1&&flag2==0){
				d[res3] = j.front();
				res3++;
				j.pop();
				flag2 = 1;
				continue;
			}
			if(j.front().ai==0){
				flag2 = 0;
			}
			c[res2] = j.front();
			res2++;
			j.pop();
		}
		for(ll i = res1;i>=1;i++){
			p.push(b[i]);
		}
		for(ll i = res2;i>=1;i++){
			j.push(c[i]);
		}
		sort(d+1,d+1+res3,cmp);
		for(int i = 1;i<=res3;i++){
			cout<<d[i].x<<" ";
		}
		cout<<endl;
	}
    return 0;
}
2024/11/11 21:19
加载中...