Submission #1175475

#TimeUsernameProblemLanguageResultExecution timeMemory
1175475OI_AccountNaan (JOI19_naan)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; #define X first #define Y second typedef long long ll; typedef __int128 l2; typedef pair<ll, ll> point; const int N = 2000; int n, l, ans[N + 10]; ll a[N + 10][N + 10]; point p[N + 10][N + 10]; bool mark[N + 10]; void readInput() { cin >> n >> l; for (int i = 1; i <= n; i++) for (int j = 1; j <= l; j++) { cin >> a[i][j]; a[i][j] *= (ll) n; } } void calcP(int i) { ll all = 0; for (int j = 1; j <= l; j++) all += a[i][j]; int pnt = l; ll sum = 0; for (int j = 1; j < n; j++) { ll need = (all / (ll) n) * j; while (sum + a[i][pnt] < need) { sum += a[i][pnt]; pnt--; } p[i][j] = {need - sum, a[i][pnt]}; p[i][j].X += (ll) (l - pnt) * p[i][j].Y; } } void calcP() { for (int i = 1; i <= n; i++) calcP(i); } point maxP(point a, point b) { l2 lft = (l2) a.X * b.Y; l2 rght = (l2) b.X * a.Y; return lft < rght? b: a; } int getMax(int i, int j, int t) { return maxP(p[i][t], p[j][t]) == p[i][t]? i: j; } void calcAns() { fill(mark + 1, mark + n + 1, true); for (int i = n - 1; i >= 1; i--) { int tmp = 0; for (int j = 1; j <= n; j++) if (mark[j]) tmp = (tmp? getMax(tmp, j, i): j); cout << p[tmp][i].X << ' ' << p[tmp][i].Y << '\n'; mark[tmp] = false; ans[n - i] = tmp; } int idx = 0; for (int i = 1; i <= n; i++) if (mark[i]) idx = i; ans[n] = idx; } void writeOutput() { for (int i = 1; i <= n; i++) cout << ans[i] << ' '; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); readInput(); calcP(); calcAns(); writeOutput(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...