Submission #1310340

#TimeUsernameProblemLanguageResultExecution timeMemory
1310340beluga_catFestival (IOI25_festival)C++20
0 / 100
1175 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; vector<int> max_coupons(int A, vector<int> P, vector<int> T) { int N = P.size(); // BFS state: current tokens + bitmask of used coupons (we'll optimize later) struct State { long long tokens; vector<int> seq; vector<bool> used; }; queue<State> q; unordered_map<long long, int> best; // tokens -> max coupons vector<bool> used(N, false); q.push({A, {}, used}); best[A] = 0; vector<int> answer; while (!q.empty()) { State cur = q.front(); q.pop(); if ((int)cur.seq.size() > (int)answer.size()) answer = cur.seq; for (int i = 0; i < N; i++) { if (cur.used[i]) continue; if (cur.tokens < P[i]) continue; long long new_tokens = (cur.tokens - P[i]) * T[i]; // prune worse states if (best.count(new_tokens) && best[new_tokens] >= (int)cur.seq.size() + 1) continue; best[new_tokens] = cur.seq.size() + 1; State nxt = cur; nxt.tokens = new_tokens; nxt.used[i] = true; nxt.seq.push_back(i); q.push(nxt); } } return answer; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...