社区讨论

88pts求调

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@m5zg6roa
此快照首次捕获于
2025/01/16 22:50
去年
此快照最后确认于
2025/11/04 11:29
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 100001;
long long int c[N], f[N] = { 0 }, n, m, p1, s1, s2, i, p2;
int main() {
    cin >> n;
    for (i = 1;i <= n;i++) cin >> c[i];
    cin >> m >> p1 >> s1 >> s2;
    c[p1] += s1;
    for (i = m - 1;i > 0;i--) {
        f[i] = f[i + 1] + c[i] * (m - i);
    }
    for (i = m + 1;i <= n;i++) {
        f[i] = f[i - 1] + c[i] * (i - m);
    }
    //for(int i=1;i<=n;i++)cout<<f[i]<<' '; cout<<endl;
    if (f[1] == f[n]) p2 = m;
    else if (f[1] > f[n]) {
        long long int x1, x2, t1, t2;
        x1 = (f[1] - f[n]) / s2;
        x2 = x1 + 1;
        t1 = s2 * x1 + f[n];
        t2 = s2 * x2 + f[n];
        if (abs(f[1] - t1) <= abs(f[1] - t2)) p2 = x1;
        else p2 = x2;
        p2 += m;
        if (p2 > n) p2 = n;
    }
    else {
        long long int x1, x2, t1, t2;
        x1 = (f[n] - f[1]) / s2;
        x2 = x1 + 1;
        t1 = s2 * x1 + f[1];
        t2 = s2 * x2 + f[1];
        if (abs(f[n] - t1) <= abs(f[n] - t2)) p2 = x1;
        p2 = m - p2;
        if (p2 < 1) p2 = 1;
    }
    cout << p2;
    return 0;
}

回复

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

正在加载回复...