c++ 56分蒟蒻求助
查看原帖
c++ 56分蒟蒻求助
312929
鄙人逆水行舟楼主2021/3/20 22:10
#include <iostream>
#include <math.h>
using namespace std;
struct bing
{
	long long int ple,way,total;     //人数 距离 气势
}a[10002];
int main()
{
	long long int n,m,p,s1,s2,dra=0,tig=0,add,mmin,x;
	bool boo=0;
	cin>>n;
	for (int i=1;i<=n;i++)cin>>a[i].ple;
	cin>>m>>p>>s1>>s2;
	add=abs(p-m)*s1;     //破坏游戏平衡的势力
	for (int i=1;i<=n;i++)
	{
		if (i==m)continue;
		a[i].way=abs(i-m);
		a[i].total=a[i].ple*a[i].way;
		if (i<m)dra+=a[i].total;     //分别计算两边总气势
		else tig+=a[i].total;
	}
	if (p<m)dra+=add;
	if (p>m)tig+=add;       //加上破坏游戏的势力
	if (dra==tig)
	{
		cout<<m;      //恰好相等就输出
		return 0;
	}
	if (dra<tig)
	{
		mmin=tig-dra;   //气势差
		for (int i=m-1;i>=1;i--)   //依次补充气势小的一方
		{
			add=a[i].way*s2;
			if (abs(mmin-add)<=mmin)     //若补充完后气势差比以前小
			{
				x=i;    //标记
				boo=1;
				mmin=abs(mmin-add);
			}
		}
		if (boo==0)cout<<m;//若补充后还是没有补充前差距小的话,输出m
		else cout<<x;
	}else
	{
		mmin=dra-tig;    //同上
		for (int i=n;i>m;i--)
		{
			add=a[i].way*s2;
			if (abs(mmin-add)<=mmin)
			{
				x=i;
				boo=1;
				mmin=abs(mmin-add);
			}
		}
		if (boo==0)cout<<m;
		else cout<<x;
	}
	return 0;
}
2021/3/20 22:10
加载中...