P2234

发布时间 2023-10-25 14:19:01作者: Kai-G

乐死我了,一道需要用平衡树的算法的题,在我忘了看标签的情况下下意识用了一个普及-难度的超简单思路解决了。当然其中加入了一些半骗分半贪心性质的剪枝。
总之这破算法竟然AC了就离谱,乐死我了

Code

#include <iostream>
#include <cmath>
using namespace std;
int b[2000005];
int n,x,ans; 
int main()
{
	cin>>n;
	cin>>x;
	ans+=x;
	x+=1000000;
	b[x]=1;
	for(int i=1;i<n;i++)
	{
		cin>>x;
		x+=1000000;
		int tans=99999999;
		for(int j=x;j>=max(x-10000,0);j--)
		{
			if(b[j]==1)
			{
				tans=x-j;
				break;
			}
		}
		for(int j=x+1;j<=min(x+10000,2000000);j++)
		{
			if(b[j]==1)
			{
				tans=min(tans,j-x);
				break;
			}
		}
		if(tans==99999999)
		{
			for(int j=x;j>=0;j--)
			{
				if(b[j]==1)
				{
					tans=x-j;
					break;
				}
			}
			for(int j=x+1;j<=2000000;j++)
			{
				if(b[j]==1)
				{
					tans=min(tans,j-x);
					break;
				}
			}
		}
		ans+=tans;
		b[x]=1;
	}
	cout<<ans<<endl;
	return 0;
}