Codeforces 2020 ICPC 1425E Excitation of Atoms

题目链接

1425E

题解

题意

模拟!是情况超级多的模拟!

思路

分情况讨论。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AC代码

#include <bits/stdc++.h>

using namespace std;
using ll = long long;
#define INF (0x3f3f3f3f)
int const N = 1e5 + 10;
int n, k;
ll a[N], d[N];
ll suf[N];
ll pre[N];
int minval, minvalpos;
int mincost, mincostpos;

int main() {
    
    
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
    minval = INF;
    mincost = INF;

    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; i++) {
    
    
        scanf("%lld", &a[i]);
        if (i != 1 && i != n) {
    
    
            if (a[i] < minval) {
    
    
                minval = a[i];
                minvalpos = i;
            }
        }
        if (i == 1) pre[i] = a[i];
        else pre[i] = pre[i - 1] + a[i];
    }
    for (int i = 1; i <= n; i++) {
    
    
        scanf("%lld", &d[i]);
        if (i != n) {
    
    
            if (d[i] < mincost) {
    
    
                mincost = d[i];
                mincostpos = i;
            }
        }
        suf[i] = pre[n] - pre[i - 1];
    }

    if (k >= 2) {
    
    
        printf("%lld\n", max(0LL, max(pre[n] - mincost, a[n] - d[n])));
    } else if (k == 0) {
    
    
        ll ans = 0;
        for (int i = 1; i <= n; i++) {
    
    
            ans = max(ans, suf[i] - d[i]);
        }
        printf("%lld\n", ans);
    } else {
    
    
        ll curMinCost = INF;
        ll cir = -INF, li = -INF;
        ll ans = 0LL;
        for (int i = 1; i < n; i++) {
    
    
            curMinCost = min(curMinCost, d[i]);
            cir = pre[i] - curMinCost;
            li = suf[i + 1] - d[i + 1];
            ans = max(li + cir, max(ans, max(li, cir)));
        }
        printf("%lld\n", max(0LL, max(ans, pre[n] - minval - d[1])));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45934120/article/details/108897464