Submission

Status:

(-SSSSSSSSS)(P-SSS)(P-SSS)(SSSSSSSSSS)

Subtask/Task Score:

{0/20}{0/30}{0/30}{0/20}

Score: 0

User: tHeNyXs

Problemset: กองไฟ

Language: cpp

Time: 0.002 second

Submitted On: 2026-03-05 14:50:16

#include <bits/stdc++.h>
using namespace std;
int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    int n; cin >> n;
    vector<pair<int, int>> dp(n, {0, 0});
    int a, b, c; cin >> a >> b >> c;
    priority_queue<pair<int, int>> pq;
    pq.emplace(a, 1);
    pq.emplace(b, 2);
    pq.emplace(c, 3);
    int start = 3;
    if (!a) start--;
    if (!b) start--;
    if (!c) start--;
    int i = 0;
    while (!pq.empty()) {
        int next = (i+1) % n;
        int prev = ((i-1)%n + n) % n;
        auto[value, now] = pq.top(); pq.pop();
        if (now == dp[next].second || now == dp[prev].second) {
            if (pq.empty()) break;
            auto [tv, tn] = pq.top(); pq.pop();
            pq.emplace(value, now);
            value = tv;
            now = tn;
        }
        if (value <= 0) {
            start--;
            continue;
        }
        if (i == 0) dp[i].first = start;
        else dp[i].first = start;
        dp[i].second = now;

        if (value-1 <= 0) start--;
        else pq.emplace(value-1, now);
        i++;
    }

    int sum = 1;
    for (int i = 0; i < n; ++i) {
        // cout << "I : " << i << " | value : " << dp[i].first << " dish : " << dp[i].second << '\n';
        sum *= dp[i].first;
    }
    cout << sum;

    return 0;
}