제출 #1145308

#제출 시각아이디문제언어결과실행 시간메모리
1145308PekibanAliens (IOI16_aliens)C++20
0 / 100
1 ms328 KiB
#include "aliens.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const int M = 1e6 + 5; deque<int> dq; ll dp[M], C[M]; struct line { ll k, c; ll f(ll x) { return k * x + c; }; } T[M]; ld X(line &A, line &B) { return (ld)(A.c - B.c) / (B.k - A.k); } long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) { int mn[m+1]; fill(mn, mn+m+1, 1e9); for (int i = 0; i < n; ++i) r[i]++, c[i]++; for (int i = 0; i < n; ++i) mn[max(r[i], c[i])] = min({mn[max(r[i], c[i])], r[i], c[i]}); ll L = 0, R = m * (1ll) * m, ans = 1e18; while (L <= R) { ll mid = (L + R)/2; T[0] = {0, 0}, dq = {0}, C[0] = 0; for (ll i = 1; i <= m; ++i) { if (mn[i] != 1e9) { int sz = dq.size(), p = -1; while (sz > 1 && dq[sz-1] >= mn[i]) p = dq[sz-1], dq.pop_back(), sz--; while (dq.size() > 1 && X(T[dq[0]], T[dq[1]]) < i) dq.pop_front(); dp[i] = T[dq[0]].f(i) + i * i + mid, C[i] = C[dq[0]]+1; if (p != -1) { T[p] = {-2*p, dp[i] - i * i + 2 * i * p}; C[p] = C[i]; dq.push_back(p); } } else dp[i] = dp[i-1], C[i] = C[i-1]; int sz = dq.size()-1; while (sz > 1 && X(T[dq[sz-2]], T[i]) <= X(T[dq[sz-2]], T[dq[sz-1]])) dq.pop_back(), sz--; T[i] = {-2*i, dp[i] - i * i + 2 * i * i}; dq.push_back(i); } if (C[m] <= k) R = mid-1, ans = dp[m] - k * mid; else L = mid+1; } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

aliens.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...