DMOJ · ampl2024wp3

Amplitude Hackathon Winter '24 Problem 3 - Killer Queen

This C++ solution uses graph traversal for DMOJ ampl2024wp3 Amplitude Hackathon Winter '24 Problem 3 - Killer Queen. Read the reasoning, inspect the code, or try your own test case below.

ampl2024wp3Implementation & simulationGraph traversalC++50 lines
Solution119of 248
Open official problem ↗ Download C++ file ↓ Search the library → Open full Code Lab ↗ Report an issue ↗

Approach

Graph traversal

Killer Queen team and queen-role enumeration matches the brute-force implementation.

Implementation & simulation

Problem and code

Useful links.

Written by benbenyaojifen. Try the problem first, then compare your approach with the code.

Open official problem ↗View exact source file ↗
Implementation

Problem_3_Killer_Queen.cpp

C++

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    using i128 = __int128;
    const int inf = 1e9;
    const ll INF = 2e18; //❄️
    int main() {
        ios::sync_with_stdio(0); cin.tie(0); 
        vector<int> a(10), b(10);
        for (int i = 0; i < 20; i++) {
            if (i < 10) cin >> a[i];
            else cin >> b[i - 10];
        }
        ll ans = INF;
        vector<int> ta;
        vector<bool> ca(10);
        auto dfs = [&] (auto &&self, int pos, int cnt) -> void {
            if (cnt == 5) {
                vector<int> tb;
                for (int i = 0; i < 10; i++) {
                    if (!ca[i]) tb.push_back(i);
                }
                ll pa = 0, pb = 0;
                for (int i = 0; i < ta.size(); i++) {
                    pa += a[ta[i]];
                }
                for (int i = 0; i < tb.size(); i++) {
                    pb += a[tb[i]];
                }
                for (int i = 0; i < ta.size(); i++) {
                    ll na = pa - a[ta[i]] + b[ta[i]];
                    for (int j = 0; j < tb.size(); j++) {
                        ll nb = pb - a[tb[j]] + b[tb[j]];
                        ans = min(ans, abs(na - nb));
                    }
                }
                return;
            }
            if (pos == 10) return;
            ta.push_back(pos);
            ca[pos] = 1;
            self(self, pos + 1, cnt + 1);
            ta.pop_back();
            ca[pos] = 0;
            self(self, pos + 1, cnt);
        };
        dfs(dfs, 0, 0);
        cout << ans << '\n';
        return 0;
    }
        

Did this explanation save you time? I'm a Grade 11 student building this free library to make difficult algorithms easier to understand.

Buy me a coffee ↗Keep studying →

Test this problem

Run your code here.

Paste your code, run a test case, compare the output, or trace selected values.

Full trace, comparison & stress testing ↗
StatusReady
Output
No run yet.
Diagnostics
No diagnostics yet.

Each run is isolated and has strict limits. Passing one test does not guarantee the judge will accept the solution.