95pts求调
查看原帖
95pts求调
1409635
_5k_kudang_inserter楼主2024/8/6 18:48

RT。

WA On #9.

#include<iostream>
#include<cstdio>
#include<queue>
#include<deque>

using namespace std;

const int maxn=1e6+100;

struct snake
{
	int bh,sl;
	bool operator <(const snake tmp)const
	{
		return sl<tmp.sl||(sl==tmp.sl&&bh<tmp.bh);
	}
	snake operator -(const snake tmp)
	{
		snake ans;
		ans.bh=bh;
		ans.sl=sl-tmp.sl;
		return ans;
	}
}sna[maxn];

int n;
deque<snake> q1,q2;

snake find_pop_min()
{
	if(q1.empty())
	{
		snake tmp=q2.front();
		q2.pop_front();
		return tmp;
	}
	if(q2.empty())
	{
		snake tmp=q1.front();
		q1.pop_front();
		return tmp;
	}
	if(q1.front()<q2.front())
	{
		snake tmp=q1.front();
		q1.pop_front();return tmp;
	}
	else
	{
		snake tmp=q2.front();
		q2.pop_front();return tmp;
	}
}

snake find_min()
{
	if(q1.empty())
	{
		snake tmp=q2.front();
		return tmp;
	}
	if(q2.empty())
	{
		snake tmp=q1.front();
		return tmp;
	}
	if(q1.front()<q2.front())
	{
		return q1.front();
	}
	else
	{
		return q2.front();
	}
}

snake find_pop_max()
{
	if(q1.empty())
	{
		snake tmp=q2.back();
		q2.pop_back();
		return tmp;
	}
	if(q2.empty())
	{
		snake tmp=q1.back();
		q1.pop_back();
		return tmp;
	}
	if(!(q1.back()<q2.back()))
	{
		snake tmp=q1.back();
		q1.pop_back();return tmp;
	}
	else
	{
		snake tmp=q2.back();
		q2.pop_back();return tmp;
	}
}

bool eat()
{
	if(q1.size()+q2.size()==1)return false;
	snake the_min=find_pop_min(),the_max=find_pop_max();
	if(find_min()<(the_max-the_min))
	{
		q2.push_front(the_max-the_min);
		return true;
	}
	else
	{
		q2.push_front(the_max-the_min);
		return !eat();
	}
}

int st()
{
	int ans=0;
	while(eat())ans++;
	return n-ans;
}

int main()
{
	//freopen("snakes2.in","r",stdin);
	//freopen("snakes2.out","w",stdout);
	int t;
	cin>>t;
	for(int x=1;x<=t;x++)
	{
		if(x==1)
		{
			cin>>n;
			for(int i=1;i<=n;i++)
			{
				sna[i].bh=i;
				scanf("%d",&sna[i].sl);
			}
		}
		else
		{
			int k;
			cin>>k;
			for(int i=1,t1,t2;i<=k;i++)
			{
				scanf("%d%d",&t1,&t2);
				sna[t1].sl=t2;
			}
		}
		q1.clear();
		q2.clear();
		for(int i=1;i<=n;i++)
		{
			q1.push_back(sna[i]);
		}
		cout<<st()<<'\n';
	}
	return 0;
}
2024/8/6 18:48
加载中...