Submission #532086

#TimeUsernameProblemLanguageResultExecution timeMemory
532086fhvirusNaan (JOI19_naan)C++17
24 / 100
3749 ms492 KiB
// Knapsack DP is harder than FFT. #include <bits/stdc++.h> using namespace std; typedef int64_t ll; typedef pair<int, int> pii; #define pb emplace_back #define AI(x) begin(x),end(x) #define ff first #define ss second #ifdef OWO #define debug(args...) LKJ("\033[1;32m[ " + string(#args) + " ]\033[0m", args) template <class I> void LKJ(I&&x) { cerr << x << endl; } template <class I, class...T> void LKJ(I&&x, T&&...t) { cerr << x << ", "; LKJ(t...); } template <class I> void OI(I a, I b) { while (a != b) cerr << *a << " \n"[(a = next(a)) == b]; } #else #define debug(...) 0 #define OI(...) 0 #endif const int kN = 2002; int N, L, V[kN][kN]; ll dupl, pre[kN][kN], ori[kN]; ll f(int i, ll j) { int k = j / dupl; return pre[i][k] * dupl + V[i][k + 1] * (j - k * dupl); } bool solve(const vector<int>& perm) { vector<ll> x(1, 0); for (const int& i: perm) { int j = x.back(); while (j <= dupl * L and (f(i, j) - f(i, x.back())) * N < ori[i] * dupl) ++j; if (j > dupl * L) return false; x.pb(j); } x.back() = dupl * L; for (int i = 1; i < N; ++i) cout << x[i] << ' ' << dupl << '\n'; for (const int& i: perm) cout << i << " \n"[i == perm.back()]; return true; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> L; for (int i = 1; i <= N; ++i) for (int j = 1; j <= L; ++j) { cin >> V[i][j]; pre[i][j] = pre[i][j - 1] + V[i][j]; ori[i] += V[i][j]; dupl = max(dupl, (ll) V[i][j]); } dupl = dupl * N; vector<int> perm(N); iota(AI(perm), 1); do if (solve(perm)) exit(0); while (next_permutation(AI(perm))); assert(0); cout << -1 << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...