模拟80分wa求调
查看原帖
模拟80分wa求调
1395986
vscdr_楼主2024/10/21 21:06
#include<bits/stdc++.h>
using namespace std;
constexpr int N = 1e5 + 7;
long long a[N];
int n, m, p1, s1, s2;
long long ans, cnt;
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	cin >> m >> p1 >> s1 >> s2;
	a[p1] += s1;
	for (int i = 1; i <= n; i++)
	{
		if (i > m || i < m)
		{
			// cout << i << ' ';
			if (i < m)ans += (m - i) * a[i]; //ans是龙

			else if (i > m)cnt += (i - m) * a[i];//cnt是虎
			//cout << ans << ' ' << cnt << ' ';
		}

	}
	long long res{};
	long long Min = 1e18 + 1;
	for (int i = 1; i < m; i++)
	{


		long long c = ans;
		c = c + s2 * (m - i);
		if ((c - cnt) >= 0)
		{
			if ((c - cnt) < Min)
			{
				Min = c - cnt;
				res = i;
			}
		}
		else
		{
			if ((cnt - c) < Min)
			{
				Min = cnt - c;
				res = i;
			}
		}
	}
	for (int i = m + 1; i <= n; i++)
	{
		long long c = cnt;
		c = c + s2 * (i - m);
		if (c - ans >= 0)
		{
			if ((c - ans) < Min)
			{
				Min = c - ans;
				res = i;
			}
		}
		else
		{
			if ((ans - c) < Min)
			{
				Min = ans - c;
				res = i;
			}
		}
	}
	// cout << Min << '\n';
	if (((cnt - ans) >= 0 && Min > (cnt - ans)) || ((ans - cnt) >= 0 && Min > (ans - cnt)))
	{
		cout << m;
		return 0;
	}
	if ((Min == cnt - ans || Min == ans - cnt) && res > m)
	{
		cout << m;
		return 0;
	}
	cout << res;
	return 0;
}
2024/10/21 21:06
加载中...