【2018NOIP普及组】T2 龙虎斗

P5015 标题统计
题目传送门
思路:
我们先算出龙和虎的不加s2时的势力值,然后暴力1~n去放s2就行了。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
long long n,c[N],m,p1,s1,s2,l,h,minn,ans;
void input()
{
	cin>>n;
	for(long long i=1;i<=n;i++) cin>>c[i];	
	cin>>m>>p1>>s1>>s2;
	c[p1]+=s1;  //将s1个人调入p1号兵营 
} 
int main()
{
	//fre();
	input();
	for(long long i=1;i<=n;i++)
	{
		if(i<=m) l+=(m-i)*c[i];  //龙的气势(原本) 
		else h+=(i-m)*c[i];  //虎的气势 (原本) 
	}
	long long t1=l,t2=h;
	t1+=(m-1)*s2;
	minn=abs(t1-t2),ans=1;
	for(long long i=2;i<=n;i++) //模拟s2个人放兵营 
	{
		t1=l,t2=h;
		if(i<=m) t1+=(m-i)*s2; //放龙的地盘 
		else t2+=(i-m)*s2; //放虎的地盘 
		if(abs(t1-t2)<minn) minn=abs(t1-t2),ans=i; //计算差值并取最小 
	}
	cout<<ans<<endl; //输出答案,完美结束! 
	return 0;
}
原创文章 157 获赞 148 访问量 8311

猜你喜欢

转载自blog.csdn.net/bigwinner888/article/details/105822025