Submission #1187787

#TimeUsernameProblemLanguageResultExecution timeMemory
1187787oviyan_gandhiNaan (JOI19_naan)C++17
29 / 100
4094 ms2372 KiB
#include <bits/stdc++.h> #define int long long using namespace std; struct Frac { int n, d; Frac operator + (const Frac &o) const { return {n*o.d + o.n*d, d*o.d}; } Frac operator - (const Frac &o) const { return {n*o.d - o.n*d, d*o.d}; } bool operator > (const Frac &o) const { return n*o.d > o.n*d; } Frac operator * (const int x) const { return { n*x, d }; } Frac operator / (const int x) const { return { n, d*x }; } }; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n, l; cin >> n >> l; vector<vector<int>> v(n, vector<int>(l)); for (auto &a : v) for (int &x : a) cin >> x; vector<int> ans(n); iota(ans.begin(), ans.end(), 0); vector<Frac> pts; bool possible = false; do { pts.clear(); bool cp = true; Frac st{0, 1}; int curr = 0; for (int x : ans) { Frac req{accumulate(v[x].begin(), v[x].end(), 0), n}; while (req > ((Frac{curr+1, 1} - st)*v[x][curr])) { req = req - ((Frac{curr+1, 1} - st)*v[x][curr]); curr++; st = {curr, 1}; if (curr == l) { cp = false; break; } } if (!cp) break; st = st + req/v[x][curr]; pts.push_back(st); } if (cp) { possible = true; break; } } while (next_permutation(ans.begin(), ans.end())); if (!possible) cout << "-1\n"; else { pts.pop_back(); for (auto [n, d] : pts) cout << n << ' ' << d << '\n'; for (int x : ans) cout << (x+1) << ' '; cout << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...