根据题解思路写的清新算法,40分TLE???
查看原帖
根据题解思路写的清新算法,40分TLE???
200696
DreamerPatrick楼主2021/11/7 11:34
#include<bits/stdc++.h>
#define INF 200010

using namespace std;

int n;
set<int> s1,s2;

inline int read()
{
	int s=0,w=1;
	char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();};
	while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();};
	return s*w;
}

int main()
{
	n=read();
	s1.clear();
	s2.clear();
	int q;
	for(int i=1;i<=n;i++)
	{
		q=read();
		if(q) s1.insert(i);
		else s2.insert(i);
	}
	s1.insert(INF);
	s2.insert(INF);
	int nt=0;
	bool p;
	if(*s1.begin()<*s2.begin()) p=0;
	else p=1;
	while(!p&&s1.size()>1||p&&s2.size()>1)
		if(!p)
		{
			nt=*s1.upper_bound(nt);
			if(nt==INF)
			{
				nt=0;
				if(*s1.begin()<*s2.begin()) p=0;
				else p=1;
				puts("");
				continue;
			}
			printf("%d ",nt);
			s1.erase(nt);
			p=!p;
		}
		else
		{
			nt=*s2.upper_bound(nt);
			if(nt==INF)
			{
				nt=0;
				if(*s1.begin()<*s2.begin()) p=0;
				else p=1;
				puts("");
				continue;
			}
			printf("%d ",nt);
			s2.erase(nt);
			p=!p;
		}
	puts("");
	while(s1.size()>1) printf("%d\n",*s1.begin()),s1.erase(*s1.begin());
	while(s2.size()>1) printf("%d\n",*s2.begin()),s2.erase(*s1.begin());
	return 0;
}
2021/11/7 11:34
加载中...