20分暴力求助
查看原帖
20分暴力求助
197479
sxyn楼主2020/8/16 11:28
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
long long n;//兵营数量 
long long c[222333];//第i个兵营里的工兵数量 
long long m,p1,s1,s2,p2;//m中间,s1数量,p1兵营(天降神兵),s2手中士兵 
long long dragon=0,tiger=0;
long long cha=999999999;
int main()
{
	//freopen("P5016.in","r",stdin);
	//freopen("P5016.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>c[i];
	cin>>m>>p1>>s1>>s2;
	if(p1<m)
		dragon+=s1*(m-p1);
	if(p1>m)
		tiger+=s1*(p1-m);
	for(int i=1;i<=n;i++)
	{
		if(i<m)
			dragon+=c[i]*(m-i);
		if(i>m)
			tiger+=c[i]*(i-m);
	}
	cha=abs(dragon-tiger);
	if(dragon<tiger)
		for(int i=1;i<=m;i++)
		{
			dragon+=s2*(m-i);
			if(abs(dragon-tiger)<cha)
				cha=abs(dragon-tiger);
			if(abs(((dragon-=s2*(m-i))+s2*(m-i+1))-tiger)<cha)
				dragon-=s2*(m-i);
			if(abs(((dragon-=s2*(m-i))+s2*(m-i+1))-tiger)>cha)
			{
				p2=i;
				break;
			}
		}
	if(dragon==tiger)
	{
		cout<<m<<endl;
		return 0;
	} 
	if(dragon>tiger)
		for(int i=m;i<=n;i++)
		{
			tiger+=s2*(i-m);
			if(abs(tiger-dragon)<cha)
				cha=abs(dragon-tiger);
			if(abs(((tiger+=s2*(i-m))+s2*(i-m+1))-dragon)<cha)
				tiger-=s2*(i-m);
			if(abs(((tiger+=s2*(i-m))+s2*(i-m+1))-dragon)>cha)
			{
				p2=i;
				break;
			}
		}
	cout<<p2<<endl;
	return 0;
}

感谢qwq

2020/8/16 11:28
加载中...