Submission #42802

#TimeUsernameProblemLanguageResultExecution timeMemory
42802funcsrAliens (IOI16_aliens)C++14
0 / 100
2 ms604 KiB
#include "aliens.h" #include <iostream> #include <vector> #include <string> #include <cassert> #include <algorithm> using namespace std; typedef pair<int, int> P; #define rep(i, n) for (int i=0; i<(n); i++) #define all(x) x.begin(), x.end() #define pb push_back #define INF 1145141919 #define _1 first #define _2 second inline void chmin(long long &x, long long v) { if (x > v) x = v; } long long dp[100010][101]; int L[100010]; long long take_photos(int N, int M, int K, std::vector<int> R, std::vector<int> C) { vector<P> ps; rep(i, N) { int l = R[i], r = C[i]; if (l > r) swap(l, r); ps.pb(P(l, -r)); } sort(all(ps)); int mr = -1; vector<P> nps; for (P p : ps) { if (-p._2 > mr) { nps.pb(P(p._1, -p._2)); mr = -p._2; } } swap(ps, nps); M = mr+1; rep(i, M) L[i] = i+1; for (P p : ps) { int l = p._1, r = p._2; //cout<<"["<<l<<","<<r<<"]\n"; for (int i=l; i<=r; i++) L[i] = min(L[i], l); } rep(i, M-1) assert(L[i] <= L[i+1]); //rep(i, M) cout<<L[i]<<",";cout<<"\n"; rep(i, M+1) rep(j, K+1) dp[i][j] = 1LL<<60; dp[0][0] = 0; rep(i, M) { rep(k, K) { rep(pos, i+1) { int l = L[pos], s = i-l+1, s2 = max(0, pos-l); chmin(dp[i+1][k+1], dp[pos][k] + 1LL*s*s - 1LL*s2*s2); } } } long long m = 1LL<<60; rep(k, K+1) chmin(m, dp[M][k]); return m; }
#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...