80分求调,谢谢啦
查看原帖
80分求调,谢谢啦
708359
QinZiChen楼主2023/8/29 08:06

测试点信息

#include<iostream>
#include<cmath>
#define ll long long
using namespace std;

const int N = 1e5 + 10,MAX = 2147483647;

int b[N],nu[N];

int min_(ll a,ll b,ll &x,ll i){
	if(a < b){
		x = i;
		return a;
	}else{
		return b;
	}
}

int main(){
	ll n,m,p1,s1,s2;
	cin >> n;
	for(ll i = 1;i <= n;i ++){
		cin >> b[i];
	} 
	cin >> m >> p1 >> s1 >> s2;
	
	int lo = 0,hu = 0;
	for(ll i = 1;i < m;i ++){
		lo += (m - i) * b[i];
	}
	
	for(ll i = m + 1;i <= n;i ++){
		hu += (i - m) * b[i];
	}
	if(p1 < m) lo += (m - p1) * s1;  
	else if(p1 > m) hu += (p1 - m) * s1;  
	
	ll ans = MAX,x = 1;
	for(ll i = 1;i <= m;i ++){
		ans = min_(abs(lo - (hu + (i - m) * s2)),ans,x,i);
	}
	for(ll i = m + 1;i <= n;i ++){
		ans = min_(abs(hu - (lo + (m - i) * s2)),ans,x,i);
	}
	cout << x << endl;
	return 0;
}
2023/8/29 08:06
加载中...