Submission #97051

#TimeUsernameProblemLanguageResultExecution timeMemory
97051onjo0127Aliens (IOI16_aliens)C++11
41 / 100
2048 ms3184 KiB
#include "aliens.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pli = pair<ll, int>;
#define fi first
#define se second

int c[100009];
long long D[100009];

inline long long p(long long x) { return x*x; }

pli DP(vector<pii>& A, ll lambda) {
    int N = A.size();
    for(int i=1; i<N; i++) D[i] = 1LL * 1e18, c[i] = 0;
    for(int i=1; i<N; i++) {
        for(int j=0; j<i; j++) {
            ll nw = D[j] + p(A[i].se - A[j+1].fi + 1) - p(max(0, A[j].se - A[j+1].fi + 1)) + lambda;
            if(D[i] > nw) D[i] = nw, c[i] = c[j] + 1;
        }
    }
    return {D[N-1], c[N-1]};
}

long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) {
    vector<pii> A, B;
    for(int i=0; i<n; i++) {
        if(r[i] > c[i]) swap(r[i], c[i]);
        A.push_back({r[i], c[i]});
    }
    sort(A.begin(), A.end(), [&](pii P, pii Q) {
        if(P.se == Q.se) return P.fi > Q.fi;
        return P.se < Q.se;
    });
    B.push_back({-1, -1});
    for(int i=0; i<n; i++) {
        while(B.size() && B.back().fi >= A[i].fi) B.pop_back();
        B.push_back(A[i]);
    }
    long long L = 0, R = 1LL*1e12, f;
    while(L <= R) {
        long long m = L+R >> 1, v; int cnt;
        tie(v, cnt) = DP(B, m);
        if(cnt > k) L = m+1;
        else R = m-1, f = v - m * k;
    }
    return f;
}

Compilation message (stderr)

aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:44:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         long long m = L+R >> 1, v; int cnt;
                       ~^~
aliens.cpp:49:12: warning: 'f' may be used uninitialized in this function [-Wmaybe-uninitialized]
     return f;
            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...