P5016 龙虎斗 72分求解
  • 板块学术版
  • 楼主Leaf59
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/14 21:49
  • 上次更新2024/10/15 09:32:42
查看原帖
P5016 龙虎斗 72分求解
1401647
Leaf59楼主2024/10/14 21:49
#include<bits/stdc++.h>
using namespace std;
long long arr[120000],n,m,s1,s2,p1,sum1,sum2;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>arr[i];
    }
    cin>>m>>p1>>s1>>s2;
    for(int i=1;i<m;i++){
        sum1+=arr[i]*(m-i);
    }
    for(int i=n;i>m;i--){
        sum2+=arr[i]*(i-m);
    }
    long long min=1000000005,mini=1;
    if(p1<m){
        sum1+=s1*(m-p1);
    }
    else if(p1>m){
        sum2+=s1*(p1-m);
    }
    //printf("龙方气势:%d\n虎方气势:%d\n",sum1,sum2);
    if(sum1<sum2){
        for(int i=1;i<=m;i++){
            int sum=sum1+(s2*(m-i));
            if(abs(sum-sum2)<min){
                min=abs(sum-sum2);
                mini=i;
            }
        }
        mini=max(1ll,mini);
    }
    else if(sum2<sum1){
        for(int i=n;i>m;i--){
            int sum=sum2+(s2*(i-m));
            if(abs(sum1-sum)<=min){
                min=abs(sum1-sum);
                mini=i;
            }
        }
        mini=max(1ll,mini);
    }
    else if(sum1==sum2){
    	mini=m;
	}
    cout<<mini;
    return 0;
}
2024/10/14 21:49
加载中...