답안 #1077273

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1077273 2024-08-27T04:29:23 Z YudoTLE Feast (NOI19_feast) C++17
12 / 100
181 ms 12628 KB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int INF = INT_MAX / 2;
const int MAXN = 3e5 + 5;

int n, k;
ll arr[MAXN], dp[MAXN][2];
int cnt[MAXN][2];
ll answer;

bool eval(ll c)
{
    dp[0][1] = -INF;
    for (int i = 1; i <= n; i++)
    {
        if (dp[i - 1][0] >= dp[i - 1][1])
        {
            dp[i][0] = dp[i - 1][0];
            cnt[i][0] = cnt[i - 1][0];
        }
        else
        {
            dp[i][0] = dp[i - 1][1];
            cnt[i][0] = cnt[i - 1][1];
        }
        if (dp[i - 1][0] - c >= dp[i - 1][1])
        {
            dp[i][1] = arr[i] + dp[i - 1][0] - c;
            cnt[i][1] = cnt[i - 1][0] + 1;
        }
        else
        {
            dp[i][1] = arr[i] + dp[i - 1][1];
            cnt[i][1] = cnt[i - 1][1];
        }
    }

    ll optv = LLONG_MIN;
    int optx = INT_MIN;
    for (int i = 0; i <= n; i++)
        for (int ii = 0; ii < 2; ii++)
    {
        ll nv = dp[i][ii] + c * cnt[i][ii];
        int nx = cnt[i][ii];
        if (nv > optv)
        {
            optv = nv;
            optx = nx;
        }
        if (nv == optv)
            optx = min(optx, nx);
    }
    if (optx <= k)
        answer = max(answer, optv);
    return optx <= k;
}

void solve()
{
    cin >> n >> k;
    for (int i = 1; i <= n; i++)
        cin >> arr[i];

    ll lo = 0, hi = INF;
    while (lo <= hi)
    {
        ll mi = lo + (hi - lo) / 2;
        if (eval(mi))
            hi = mi - 1;
        else
            lo = mi + 1;
    }

    cout << answer << '\n';
}

int main()
{
    // ios_base::sync_with_stdio(false), cin.tie(0);

    int t = 1;
    // cin >> t;
    while (t--) solve();

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 9308 KB Output is correct
2 Correct 99 ms 9556 KB Output is correct
3 Correct 119 ms 9552 KB Output is correct
4 Correct 104 ms 9556 KB Output is correct
5 Correct 104 ms 9552 KB Output is correct
6 Correct 97 ms 9476 KB Output is correct
7 Correct 99 ms 9300 KB Output is correct
8 Correct 109 ms 9888 KB Output is correct
9 Correct 132 ms 9552 KB Output is correct
10 Correct 102 ms 9556 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 60 ms 9552 KB Output is correct
2 Correct 72 ms 9552 KB Output is correct
3 Correct 66 ms 9552 KB Output is correct
4 Correct 68 ms 10784 KB Output is correct
5 Correct 106 ms 12116 KB Output is correct
6 Correct 67 ms 10576 KB Output is correct
7 Correct 77 ms 10904 KB Output is correct
8 Correct 110 ms 12628 KB Output is correct
9 Correct 102 ms 12080 KB Output is correct
10 Correct 65 ms 10844 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 181 ms 9700 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 9308 KB Output is correct
2 Correct 99 ms 9556 KB Output is correct
3 Correct 119 ms 9552 KB Output is correct
4 Correct 104 ms 9556 KB Output is correct
5 Correct 104 ms 9552 KB Output is correct
6 Correct 97 ms 9476 KB Output is correct
7 Correct 99 ms 9300 KB Output is correct
8 Correct 109 ms 9888 KB Output is correct
9 Correct 132 ms 9552 KB Output is correct
10 Correct 102 ms 9556 KB Output is correct
11 Correct 60 ms 9552 KB Output is correct
12 Correct 72 ms 9552 KB Output is correct
13 Correct 66 ms 9552 KB Output is correct
14 Correct 68 ms 10784 KB Output is correct
15 Correct 106 ms 12116 KB Output is correct
16 Correct 67 ms 10576 KB Output is correct
17 Correct 77 ms 10904 KB Output is correct
18 Correct 110 ms 12628 KB Output is correct
19 Correct 102 ms 12080 KB Output is correct
20 Correct 65 ms 10844 KB Output is correct
21 Incorrect 181 ms 9700 KB Output isn't correct
22 Halted 0 ms 0 KB -