社区讨论

40分,求调!

P5016[NOIP 2018 普及组] 龙虎斗参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mkqyvg4v
此快照首次捕获于
2026/01/23 22:19
4 周前
此快照最后确认于
2026/01/24 15:13
4 周前
查看原帖
CPP
#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

const int MAXN = 1e5;
int n, c[MAXN + 10], q[MAXN + 10],  m, p1, s1, s2, ql, qr;

int main(void)
{
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> c[i];
	}
	cin >> m >> p1 >> s1 >> s2;
	for(int i = 1;i <= n;i++)
	{
		q[i] = c[i] * abs(m - i);
		if(i < m){ql += q[i];}
		if(i > m){qr += q[i];}
	}
	if(p1 < m){ql += s1 * abs(m - p1);}
	if(p1 > m){qr += s1 * abs(m - p1);}
	int minid = -1;
	if(ql > qr)
	{
		minid = (ql - qr) / s2 + m;
		if(abs(qr + (minid - m) * s2 - ql) > abs(qr + (minid - m + 1) * s2 - ql)){minid++;}
		if(abs(qr + (minid - m) * s2 - ql) > abs(qr + (minid - m - 1) * s2 - ql)){minid--;}
	}
	else
	{
		minid = (qr - ql) / s2;
		if(abs(ql + (m - minid) * s2 - qr) > abs(ql + (m - minid + 1) * s2 - qr)){minid++;}
		if(abs(ql + (m - minid) * s2 - qr) > abs(ql + (m - minid - 1) * s2 - qr)){minid--;}
	}
	cout << minid << endl;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...