56分求助QAQ!!
查看原帖
56分求助QAQ!!
397923
greenlone楼主2021/10/4 23:56
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
long long a[100005];
int main()
{
	long long n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	long long m,p1,s1,s2;
	cin>>m>>p1>>s1>>s2;
	long long x1=0,x2=0; //x1,x2分别为龙与虎的气势和
	a[p1]=a[p1]+s1;
	for(int i=1;i<m;i++)
	{
		x1=x1+a[i]*(m-i);
	}
	for(int i=m+1;i<=n;i++)
	{
		x2=x2+a[i]*(i-m);
	}
	long long min=x1-x2;  //min是龙与虎最小的差 
	int key;  //key为该放入兵营的下标 
	if(min<0) min=min*-1;
	int flag=0;     
	if(x1<x2)  //应向龙中加兵 
	{
		int t=m-1;  //t为所测点距离m的变量   此时数组检验的下标为1,2,3。。。 
		while(t>0)
		{
			int x=s2*t+x1-x2;
			if(x<0) x=x*-1;
			if(min>x)
			{
				min=x;
				key=m-t;
				flag=1;
			} 
			t--;
		}	
	}else if(x1>x2)  //应向虎中加兵 
	{
		int t=n-m-1;   //此时数组检验的下标为m+1,m+2,m+3.... 
		while(t<n-m+1)
		{
			int x=s2*t+x2-x1;
			if(x<0) x=x*-1;
			if(min>x)
			{
				min=x;
				key=m+t;
				flag=1;
			} 
			t++;
		}
	}else{  //应向m中加兵 
		cout<<m;
		return 0;
	}
	if(flag==0)    
	{
		cout<<m;
		return 0;
	}
	cout<<key;
	return 0;
}

求助各位谢谢

2021/10/4 23:56
加载中...