제출 #703767

#제출 시각아이디문제언어결과실행 시간메모리
703767LittleCubeNaan (JOI19_naan)C++14
29 / 100
4051 ms4788 KiB
#include <bits/stdc++.h> #define int long long #define ll long long #define pii pair<int, int> #define F first #define S second using namespace std; const bool LittleCubeIsBurningChicken = true; mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); ll N, L, v[2005][4005], sum[4005]; int abtodc(int a, int b, int c) { return (b * c + a - 1) / a; } vector<pii> sol; pii solve(vector<int> p) { sol.clear(); pii last = {0, 1}; int nxt = 1; for (auto i : p) { ll tmp = sum[i]; while (tmp >= v[i][nxt] - abtodc(last.S, last.F, v[i][nxt])) tmp -= v[i][nxt] - abtodc(last.S, last.F, v[i][nxt]), last = {0, 1}, nxt++; last = {abtodc(last.S, last.F, v[i][nxt]), v[i][nxt]}; last.F += tmp; sol.emplace_back(pii{last.F + last.S * (nxt - 1), last.S}); } return sol.back(); } signed main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> N >> L; // why divide by N? // how to solve using only fractions? -> we can discard leftovers (things cannot be converted to current fraction) from last person // is it guarnteed to always have a solution? -> yes (at least for N <= 6) // why? for (int i = 1; i <= N; i++) { for (int j = 1; j <= L; j++) { cin >> v[i][j]; // sum >= sum of v / N // sum * N >= sum of v sum[i] += v[i][j]; v[i][j] *= N; } for (int j = L + 1; j <= L + N; j++) v[i][L + 1] = 2'00000'000; } vector<int> p; for (int i = 1; i <= N; i++) p.emplace_back(i); solve(p); while (sol.back().F > sol.back().S * L) { pii cur = sol.back(); for (int i = 0; i < N - 1; i++) { swap(p[i], p[i + 1]); solve(p); if (sol.back().F * cur.S < sol.back().S * cur.F) break; swap(p[i], p[i + 1]); } } sol.pop_back(); for (auto [a, b] : sol) cout << a << ' ' << b << '\n'; for (auto i : p) cout << i << ' '; cout << '\n'; }

컴파일 시 표준 에러 (stderr) 메시지

naan.cpp: In function 'int main()':
naan.cpp:79:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   79 |     for (auto [a, b] : sol)
      |               ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...