Submission #1309530

#TimeUsernameProblemLanguageResultExecution timeMemory
1309530trigonSouvenirs (IOI25_souvenirs)C++20
0 / 100
9 ms332 KiB
#include <bits/stdc++.h> using namespace std; /* The judge provides this function. Do NOT define it yourself in the real submission. */ pair<vector<int>, long long> transaction(long long M); void buy_souvenirs(int N, long long P0) { vector<long long> Q(N, 0); // final counts vector<long long> Mmin(N, -1); // Mmin[i] = smallest M where type i appears /* Step 1: For each type i = 1 .. N-1, binary search the smallest M such that type i appears. */ for (int i = 1; i < N; i++) { long long low = 1; long long high = P0 - 1; long long ans = -1; while (low <= high) { long long mid = (low + high) / 2; auto res = transaction(mid); auto &L = res.first; bool found = false; for (int x : L) { if (x == i) { found = true; break; } } if (found) { ans = mid; high = mid - 1; // try smaller M } else { low = mid + 1; // need more coins } } Mmin[i] = ans; } /* Step 2: Use the discovered Mmin[i] to buy exactly i souvenirs of type i */ for (int i = 1; i < N; i++) { for (int k = 0; k < i; k++) { auto res = transaction(Mmin[i]); for (int x : res.first) { Q[x]++; } } } /* Step 3: Output final counts */ }
#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...