Submission #1319358

#TimeUsernameProblemLanguageResultExecution timeMemory
1319358Trisanu_DasSouvenirs (IOI25_souvenirs)C++20
7 / 100
12 ms400 KiB
#include <bits/stdc++.h> using namespace std; pair<vector<int>, long long> transaction(long long M); void buy_souvenirs(int N, long long P0) { int vars = N - 1; vector<vector<long long>> A; vector<long long> B; vector<long long> got(N, 0); long long step = max(1LL, P0 / (2 * N + 5)); long long M = P0 - 1; while ((int)A.size() < vars && M >= 0) { auto res = transaction(M); auto &L = res.first; long long R = res.second; vector<long long> row(vars, 0); for (int t : L) { got[t]++; if (t > 0) row[t - 1] = 1; } long long paid = M - R; A.push_back(row); B.push_back(paid); M -= step; } int eq = A.size(); vector<long long> P(vars, 0); int r = 0; for (int c = 0; c < vars && r < eq; ++c) { int piv = -1; for (int i = r; i < eq; ++i) { if (A[i][c] != 0) { piv = i; break; } } if (piv == -1) continue; swap(A[r], A[piv]); swap(B[r], B[piv]); for (int i = 0; i < eq; ++i) { if (i == r) continue; if (A[i][c] == 0) continue; long long factor = A[i][c]; for (int j = c; j < vars; ++j) A[i][j] -= factor * A[r][j]; B[i] -= factor * B[r]; } r++; } for (int i = vars - 1; i >= 0; --i) { int pivot_col = -1; for (int j = 0; j < vars; ++j) if (A[i][j] != 0) { pivot_col = j; break; } if (pivot_col == -1) continue; long long sum = B[i]; for (int j = pivot_col + 1; j < vars; ++j) sum -= A[i][j] * P[j]; P[pivot_col] = sum / A[i][pivot_col]; } for (int i = 1; i < N; ++i) { long long need = i - got[i]; while (need > 0) { transaction(P[i - 1]); need--; } } }
#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...