Submission #1251065

#TimeUsernameProblemLanguageResultExecution timeMemory
1251065hihihahaaSouvenirs (IOI25_souvenirs)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; vector<long long> P; vector<int> kpi; pair<vector<int>, long long> transaction(long long M) { vector<int> out; for (int i = 0; i < P.size(); i++) if (M >= P[i]) { M -= P[i]; kpi[i]--; out.push_back(i); } return {out, M}; } // start of solution /* #include <bits/stdc++.h> #include "souvenirs.h" using namespace std; */ struct Equation { vector<int> elem; long long sum; Equation(vector<int> e, long long s) : elem(e), sum(s) {} void clear(vector<long long>& P, int bottom) { while (elem.back() > bottom) { // elem[0] should not be less than bottom, so no need to check elem.empty(); sum -= P[elem.back()]; elem.pop_back(); } } }; Equation modified_transaction(long long M) { pair<vector<int>, long long> raw = transaction(M); return {raw.first, M - raw.second}; } void buy_souvenirs(int N, long long P0) { vector<long long> P(N, 0); vector<int> kpi(N); // track how many of each type has been bought for (int i = 0; i < N; i++) kpi[i] = i; stack<Equation> S; // store info int bottom = N - 1; // found P[i] forall i > bottom; S.push({{0}, P0}); // find P while (bottom) { Equation u = S.top(); u.clear(P, bottom); if (u.elem.size() == 1 && u.elem[0] == bottom) { S.pop(); P[bottom] = u.sum; bottom--; } else { long long amount = (u.sum - 1)/u.elem.size(); Equation next = modified_transaction(amount); for (auto i: next.elem) kpi[i]--; S.push(next); } } // clean up for (int i = 0; i < N; i++) while (kpi[i]--) transaction(P[i]); } // end of solution bool test(vector<long long> T) { P = T; int N = P.size(); kpi.resize(N); for (int i = 0; i < N; i++) kpi[i] = i; buy_souvenirs(N, P[0]); for (auto i: kpi) if (i) return false; return true; } signed main() { // testing vector<vector<long long>> tests; tests.push_back({4, 3, 1}); tests.push_back({4, 3, 2}); tests.push_back({3, 2, 1}); tests.push_back({10, 9}); tests.push_back({11, 10, 8, 6, 4, 3, 2}); for (int i = 0; i < tests.size(); i++) { cout << "Test #" << i << ": "; if (test(tests[i])) cout << "Passed"; else cout << "Failed"; cout << "\n"; } }

Compilation message (stderr)

/usr/bin/ld: /tmp/ccV3Ikgv.o: in function `main':
stub.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccWj3nMd.o:souvenirs.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccV3Ikgv.o: in function `transaction(long long)':
stub.cpp:(.text+0x1d0): multiple definition of `transaction(long long)'; /tmp/ccWj3nMd.o:souvenirs.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status