70分求助
查看原帖
70分求助
746237
SaintRelief楼主2023/9/28 22:32

记录

// Problem: P7912 [CSP-J 2021] 小熊的果篮
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P7912
// Memory Limit: 512 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
const int N=1e6+10,INF=INT_MAX;
using namespace std;
namespace fastIO{
	int read(){
		int x=0;
		bool f=1;
		char ch=getchar();
		for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=0;
		for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+(ch-'0');
		return (f==0?-x:x);
	}
	void read(int&a){a=read();}
	void read(int&a,int&b){a=read(),b=read();}
	void read(int&a,int&b,int&c){a=read(),b=read(),c=read();}
	void read(int *a,int len){for(int i=1;i<=len;i++)a[i]=read();}
	void write(int a,char t='\0'){
		if(a==0) putchar('0');
		if(a<0) putchar('-'),a=-a;
		char ch[1<<20];
		int x=a,tot=0;
		for(;x;x/=10)
		{
			ch[++tot]=(x%10)+'0';
		}
		for(;tot;tot--) putchar(ch[tot]);
		putchar(t);
	}
	void write(int a,int b){write(a),write(b);}
	void write(int a,int b,int c){write(a),write(b),write(c);}
	void write(int *a,int len){for(int i=1;i<=len;i++)write(a[i]);}
}
using namespace fastIO;
int n;
set<int>a[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		a[x].insert(i);
	}
	a[0].insert(INF);
	a[1].insert(INF);
	int nw,f=*a[0].begin()<*a[1].begin()?0:1;
	while(!f&&a[0].size()>1||f&&a[1].size()>1)
	{
		nw=*a[f].upper_bound(nw);
		if(nw==INF)
		{
			nw=0;
			f=*a[0].begin()<*a[1].begin()?0:1;
			cout<<'\n';
			continue;
		}
		cout<<nw<<' ';
		a[f].erase(nw);
		f=!f;
	}
	cout<<'\n';
	while(a[0].size()>1) cout<<*a[0].begin()<<'\n',a[0].erase(*a[0].begin());
	while(a[1].size()>1) cout<<*a[1].begin()<<'\n',a[1].erase(*a[1].begin());
	return 0;
}

hack数据:

5
1 1 0 0 1

本地输出:

1 3 5
2 4

luogu输出:

2 3 5
1 4

2023/9/28 22:32
加载中...