奇怪CE求条
查看原帖
奇怪CE求条
386547
Infter楼主2024/7/29 14:34
#include <bits/stdc++.h>
using namespace std;

#define int long long

constexpr int MAXN = 1e5 + 5;
constexpr int MAXM = 1e5 + 5;
constexpr long double eps = 1e-8;
constexpr int INF = 0x3f3f3f3f3f3f3f3f;

int n, m, p, now;
int d[MAXN], h[MAXN], t[MAXN], s[MAXN];
int f[MAXM][MAXN];

int x(int i) {
    return i;
}

int y(int i) {
    return s[i] + f[now - 1][i];
}

int k(int i) {
    return t[i];
}

long double slope(int i, int j) {
    return (long double)1 * (y(j) - y(i)) / (x(j) - x(i));
}

int q[MAXN], hed, tal;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    cin >> n >> m >> p;
    for (int i = 2; i <= n; i++) {
        cin >> d[i];
        d[i] += d[i - 1];
    }
    for (int i = 1; i <= m; i++) {
        cin >> h[i] >> t[i];
        t[i] -= d[h[i]];
    }
    sort(t + 1, t + n + 1);
    for (int i = 1; i <= m; i++) {
        s[i] = s[i - 1] + t[i];
    }

    memset(f, 0x3f, sizeof f);
    f[0][0] = 0;
    for (int i = 1; i <= p; i++) {
        hed = tal = 1;
        for (int j = 1; j <= m; j++) {
            while (hed < tal && slope(q[hed], q[hed + 1]) - eps <= k(j))
                hed++;
            int pos = q[hed];
            f[i][j] = min(f[i - 1][j], y(pos) + k(j) * (j - pos) - s[j]);
            if (y(j) >= INF)
                continue;
            while (hed < tal && slope(q[tal], j) - eps <= slope(q[tal], q[tal - 1]))
                tal--;
            q[++tal] = j;
        }
    }

    cout << f[p][m] << endl;

    return 0;
}

错误信息

#include <bits/stdc++.h>
using namespace std;

#define int long long

constexpr int MAXN = 1e5 + 5;
constexpr int MAXM = 1e5 + 5;
constexpr long double eps = 1e-8;
constexpr int INF = 0x3f3f3f3f3f3f3f3f;

int n, m, p, now;
int d[MAXN], h[MAXN], t[MAXN], s[MAXN];
int f[MAXM][MAXN];

int x(int i) {
    return i;
}

int y(int i) {
    return s[i] + f[now - 1][i];
}

int k(int i) {
    return t[i];
}

long double slope(int i, int j) {
    return (long double)1 * (y(j) - y(i)) / (x(j) - x(i));
}

int q[MAXN], hed, tal;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    cin >> n >> m >> p;
    for (int i = 2; i <= n; i++) {
        cin >> d[i];
        d[i] += d[i - 1];
    }
    for (int i = 1; i <= m; i++) {
        cin >> h[i] >> t[i];
        t[i] -= d[h[i]];
    }
    sort(t + 1, t + n + 1);
    for (int i = 1; i <= m; i++) {
        s[i] = s[i - 1] + t[i];
    }

    memset(f, 0x3f, sizeof f);
    f[0][0] = 0;
    for (int i = 1; i <= p; i++) {
        hed = tal = 1;
        for (int j = 1; j <= m; j++) {
            while (hed < tal && slope(q[hed], q[hed + 1]) - eps <= k(j))
                hed++;
            int pos = q[hed];
            f[i][j] = min(f[i - 1][j], y(pos) + k(j) * (j - pos) - s[j]);
            if (y(j) >= INF)
                continue;
            while (hed < tal && slope(q[tal], j) - eps <= slope(q[tal], q[tal - 1]))
                tal--;
            q[++tal] = j;
        }
    }

    cout << f[p][m] << endl;

    return 0;
}
2024/7/29 14:34
加载中...