80pts求助!!!(不是开long long的问题)回答闭关!
查看原帖
80pts求助!!!(不是开long long的问题)回答闭关!
1050716
Machuanqi99楼主2024/8/21 18:08
#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
class Node{
	public:
		ll soldier;
		//int distance;
		ll qishi;
		ll value;
};
Node a[100010];
int main(){
	ll n, m, p, ans;
	ll dragon = 0, tiger = 0;
	ll s1, s2;
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> a[i].soldier;
		a[i].value = i;
	}
	cin >> m >> p >> s1 >> s2;
	bool f = false;
	for(int i = 1; i <= n; i++){
		if(i == m){
			f = true;
			continue;
		}
		a[i].qishi = abs(m-a[i].value)*a[i].soldier;
		if(f == false) dragon += a[i].qishi;
		else tiger += a[i].qishi;
	}
	if(p > m) tiger += s1*(p-m);
	else dragon += s1*(m-p);
	ll tmp = abs(dragon-tiger);
	ll minn = 9223372036854775806;
	//cout << dragon << " " << tiger << endl;
	if(dragon < tiger){
		for(int i = 1; i < m; i++){
			int t = s2*(m-a[i].value);
			if(abs((dragon+t)-tiger) < minn){
				minn = abs((dragon+t)-tiger);
				ans = i;
			}
		}
	} else if(dragon > tiger){
		for(int i = m+1; i <= n; i++){
			int t = s2*(a[i].value-m);
			if(abs((tiger+t)-dragon) < minn){
				minn = abs((tiger+t)-dragon);
				ans = i;
			}
		}
	}
	if(minn <= tmp) cout << ans;
	else cout << m;
	return 0;
}

我真的是无语啦,能开longlong的我都开了,结果还是80pts

2024/8/21 18:08
加载中...