thupc E 求条
查看原帖
thupc E 求条
551861
strcmp楼主2023/12/21 10:23

rt,赛时没调出来成整队的罪人了/ll

#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long int ll;
using pll = pair<ll, ll>;
const int maxn = 5e5 + 10;
const ll mod = 998244353LL;
const ll inf = 1145141919810LL;
int n; ll a[maxn], b[maxn], c[maxn], d[maxn], e[maxn], f[maxn];
ll w[maxn], g[maxn]; int p = 0, q = 0;
int main() {
    scanf("%d", &n); ll sum = 0, ans = 0; 
    for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
    for (int i = 1; i <= n; i++) scanf("%lld", &b[i]);
    for (int i = 1; i <= n; i++) scanf("%lld", &c[i]);
    for (int i = 1; i <= n; i++) if (a[i]) sum += (d[i] = min(a[i] + c[i], b[i]));
    for (int i = 1; i <= n; i++) e[i] = e[i - 1] + d[i];
    for (int i = n; i >= 1; i--) f[i] = f[i + 1] + d[i];
    for (int i = 1; i <= n; i++) {
        if (!a[i] && b[i] && c[i]) w[++p] = min(c[i] + 1, b[i]); //
        if (!a[i]) g[++q] = c[i] + 1;
    }
    sort(w + 1, w + p + 1, greater<ll>());
    for (int i = 1; i <= p; i++) w[i] += w[i - 1], g[i] += g[i - 1];
    for (int i = 1; i <= n; i++) {
        ll u = e[i - 1] + f[i + 1];
        //能够用来做贡献或者活动其它点的数目
        if (a[i]) u += a[i] + c[i], ans += a[i] + c[i];
        if (u) {
            if (a[i]) printf("%lld ", u - p + w[p]);
            else printf("%lld ", u - p + w[p] - min(c[i] + 1, b[i]) + c[i] + 1);
        }
        else printf("0 ");
    }
    puts("");
    if (ans) printf("%lld\n", ans - q + g[q]);
    else puts("0");
    return 0;
}

A 1-5,31-40。其余全部 WA,思路是模拟贪心。

2023/12/21 10:23
加载中...