Submission #1174175

#TimeUsernameProblemLanguageResultExecution timeMemory
1174175avighnaNaan (JOI19_naan)C++20
0 / 100
1 ms328 KiB
#include <bits/stdc++.h> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int n, l; std::cin >> n >> l; std::vector v(n, std::vector<int>(l)), pv(n, std::vector<int>(l)); for (int i = 0; i < n; ++i) { for (auto &j : v[i]) { std::cin >> j; } std::partial_sum(v[i].begin(), v[i].end(), pv[i].begin()); } auto reduce = [&](long long &num, long long &den) { int d = std::gcd(num, den); num /= d, den /= d; if (num < 0 and den < 0) { num *= -1, den *= -1; } }; std::vector<int> p(n); std::iota(p.begin(), p.end(), 0); auto sum = [&](int i, int l, int r) { if (l > r) { return 0LL; } long long ans = pv[i][r]; if (l != 0) { ans -= pv[i][l - 1]; } return ans; }; auto sum_f = [&](int i, int num, int den) { int w = num / den; long long full = sum(i, 0, w - 1); num -= w * den; return std::pair<long long, long long>({full * den + num * v[i][w], den}); }; do { std::vector<std::pair<long long, long long>> ans; std::pair<long long, long long> x = {0, 1}; bool good = true; for (auto &i : p) { auto [num, den] = sum_f(i, x.first, x.second); reduce(num, den); auto idx = *std::ranges::partition_point(std::views::iota(0, l), [&](int j) { return __int128_t(n) * (sum(i, 0, j) * den - num) < __int128_t(sum(i, 0, l - 1)) * den; }); if (idx == l) { good = false; break; } // sum[0...idx-1] - sum_f[0...x] + x * v[idx] = sum[0...l-1] / n // x = (sum[0...l-1]*den + n*num - n*sum[0...idx-1]*den) / (n * // v[idx]*den) auto p1 = sum(i, 0, l - 1); auto p2 = sum(i, 0, idx - 1); long long n = sum(i, 0, l - 1) * den - sum(i, 0, idx - 1) * den * n + num * n; long long d = n * v[p[i]][idx] * den; reduce(n, d); n += d * idx; reduce(n, d); if (x.first != 0) { ans.push_back(x); } x = {n, d}; } if (!good) { continue; } for (auto &i : ans) { std::cout << i.first << ' ' << i.second << '\n'; } for (auto &i : p) { std::cout << i + 1 << ' '; } std::cout << '\n'; return 0; } while (std::next_permutation(p.begin(), p.end())); std::cout << "-1\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...