wsm炸了???
查看原帖
wsm炸了???
777131
IDNo1楼主2023/10/9 22:29

直接死循环......

#include<bits/stdc++.h>
#define re register int
#define rll register long long
using namespace std;
int n;
struct flsh
{
	bool op;
	int id;	
};
flsh a[int(2e5+5)];
int bg[int(2e5+5)];
int zb[int(2e5+5)];
struct node
{
	int f,e;
	bool op;
};
vector<node> v;
inline void write(re x)
{
	if(x<0)
	{
		putchar('-');
		x=-x; 
	}
	if(x>9)
	{
		write(x/10);
	}
	putchar(x%10+'0');
}
bool data;
int main()
{
	scanf("%d",&n);
	for(re i=1;i<=n;i++)
	{
		scanf("%d",&data);
		a[i].op=data;
		a[i].id=i;
	}
	re pos=1;
	bool b=a[1].op;
	v.push_back({1,1,a[1].op});
	while(pos<n)
	{
		pos++;
		if(a[pos].op==b)
		{
			v.back().e++;
		}
		else
		{
			b=a[pos].op;
			v.push_back({pos,pos,a[pos].op});
		}
	}
//	for(re i=0;i<v.size();i++)
//	{
//		cout<<v[i].f<<" "<<v[i].e<<" "<<v[i].op<<"\n";
//	}
	re iter;
	//int cnt=0; 
	while(!v.empty()/*&&cnt<100*/)
	{//cnt++;
		iter=0;
//		cout<<v.size()<<" ";
		for(re i=0;i<v.size();i++)
		{
//			cout<<i+1<<" "<<v[i].f<<" ";
//			cout<<a[v[i].f].id<<"\n";
			if(a[v[i].f].id!=-1)
			{
				zb[iter++]=a[v[i].f].id;
				a[v[i].f].id=-1;
				v[i].f++;
			}
		}
		for(re i=0;i<v.size();i++)
		{
			if(v[i].f>v[i].e)
			{
//				cout<<i<<" "<<v[i].f<<" "<<v[i].e<<"\n";
//				cout<<i-1<<" "<<v[i-1].f<<" "<<v[i-1].e<<"\n";
				v.erase(v.begin()+i);
				if(i<v.size()&&i-1>=0&&v[i].op==v[i-1].op)
				{
//					cout<<v[i].f<<" "<<v[i].e<<"\n";
					v[i].f=v[i-1].f;
					v.erase(v.begin()+i-1);
//					cout<<v[i-1].f<<" "<<v[i-1].e<<"\n";
				}
			}
		}
//		cout<<endl<<"v.arr:\n";
//		for(re i=0;i<v.size();i++)
//		{
//			cout<<v[i].f<<" "<<v[i].e<<" "<<v[i].op<<"\n";
//		}cout<<endl<<endl<<endl;
//		cout<<"\nans:\n";
		for(re i=0;i<iter;i++)
		{
			cout<<"      ";write(zb[i]);putchar(' ');
		}
		putchar('\n');
	}
	return 0;
}
2023/10/9 22:29
加载中...