제출 #532086

#제출 시각아이디문제언어결과실행 시간메모리
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...