제출 #1251555

#제출 시각아이디문제언어결과실행 시간메모리
1251555nguynSouvenirs (IOI25_souvenirs)C++20
100 / 100
12 ms412 KiB
#include "souvenirs.h" #include <bits/stdc++.h> using namespace std; void buy_souvenirs(int N, long long P0) { vector<vector<int>> vis(N, vector<int>(N, 0)); vector<long long> p(N); vector<int> cnt(N); p[0] = P0; vis[0][0] = 1; for (int i = N - 1; i > 0; i--) { while(!p[i]) { int j = i; while(!p[j]) j--; int c = 0; for (int k = 0; k < N; k++) c += (vis[j][k] == 1); long long val = (p[j] - 1) / c; vector<int> vec; long long rem; vector<int> v(N, 0); tie(vec, rem) = transaction(val); for (int x : vec) { cnt[x]++; v[x] = 1; } // cout << i << ' ' << val << endl; val -= rem; // for (int k = 0; k < N; k++) { // cout << v[k] << ' '; // } cout << endl; for (int k = i + 1; k < N; k++) { if (v[k]) { v[k] = 0; val -= p[k]; } } // for (int k = 0; k < N; k++) { // cout << v[k] << ' '; // } cout << endl; int k = 0; while(!v[k]) k++; vis[k] = v; p[k] = val; } for (int j = 0; j < i; j++) { if (vis[j][i] && p[j]) { p[j] -= p[i]; vis[j][i] = 0; } } // cout << i << ": " << p[i] << endl; } for (int i = 0; i < N; i++) { for (int j = cnt[i]; j < i; j++) { transaction(p[i]); } } return; }
#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...