QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#131910 | #2784. Aliens | valerikk# | 0 | 2ms | 11024kb | C++17 | 2.4kb | 2023-07-28 22:09:01 | 2024-07-04 01:01:26 |
Judging History
answer
#include "aliens.h"
#include <bits/stdc++.h>
using namespace std;
namespace {
typedef long long ll;
const int N = 1e5 + 7;
const ll INF = 4e18;
struct convhull {
struct line {
ll k, b;
};
vector<line> st;
bool bad(line l1, line l2, line l3) {
return (l3.b - l1.b) * (l2.k - l1.k) <= (l2.b - l1.b) * (l1.k - l3.k);
}
void add(ll k, ll b) {
line l = {k, b};
while (st.size() >= 2 && bad(st[st.size() - 2], st.back(), l)) {
st.pop_back();
}
st.push_back(l);
}
bool good(line l1, line l2, ll x) {
return l2.b - l1.b <= x * (l1.k - l2.k);
}
ll get(ll x) {
if (st.empty()) {
return INF;
}
int l = 0, r = st.size();
while (r - l > 1) {
int m = (l + r) / 2;
if (good(st[m - 1], st[m], x)) {
l = m;
} else {
r = m;
}
}
return st[l].k * x + st[l].b;
}
};
int n, k;
ll l[N], r[N];
ll pref[N];
ll kek[N];
pair<ll, int> dp[N];
convhull ch[N];
void add(int i) {
ll k = -l[i];
ll b = dp[i].first + pref[i] - kek[i] + l[i] * l[i];
ch[dp[i].second].add(k, b);
}
pair<ll, int> solve(ll cost) {
for (int i = 1; i <= n; ++i) {
dp[i] = {INF, n + 1};
}
dp[0] = {0, 0};
add(0);
for (int j = 1; j <= n; ++j) {
for (int t = dp[j - 1].second; t >= max(0, dp[j - 1].second - 1); --t) {
pair<ll, int> ndp;
ndp.first = ch[t].get(2 * r[j - 1]) + r[j - 1] * r[j - 1] - pref[j] + cost;
ndp.second = t + 1;
dp[j] = min(dp[j], ndp);
}
add(j);
}
return dp[n];
}
}
ll take_photos(int grdn, int grdm, int grdk, vector<int> grdr, vector<int> grdc) {
k = grdk;
vector<pair<int, int>> segs;
for (int i = 0; i < grdn; ++i) {
int r = grdr[i];
int c = grdc[i];
if (r <= c) {
segs.push_back({r, c + 1});
} else {
segs.push_back({c, r + 1});
}
}
sort(segs.begin(), segs.end());
n = 0;
for (auto sg : segs) {
int l1 = sg.first;
int r1 = sg.second;
if (n > 0 && l1 == l[n - 1] && r1 > r[n - 1]) {
--n;
}
if (n == 0 || r1 > r[n - 1]) {
l[n] = l1;
r[n] = r1;
++n;
}
}
kek[0] = 0;
for (int i = 1; i < n; ++i) {
kek[i] = r[i - 1] >= l[i] ? (r[i - 1] - l[i]) * (r[i - 1] - l[i]) : 0;
}
pref[0] = 0;
for (int i = 0; i < n; ++i) {
pref[i + 1] = pref[i] + (r[i] - l[i]) * (r[i] - l[i]) - kek[i];
}
k = min(k, n);
ll l = 0, r = 1e12;
while (r - l > 1) {
ll m = (l + r) / 2;
if (solve(m).second <= k) {
r = m;
} else {
l = m;
}
}
ll ans = solve(r).first - k * r;
ans += pref[n];
return ans;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 4
Accepted
time: 0ms
memory: 9604kb
input:
2 6 2 1 4 4 1
output:
098d134608c94f7413faac591054ee35 16
result:
ok Correct answer: answer = 16
Test #2:
score: 0
Accepted
time: 2ms
memory: 9256kb
input:
1 2 1 0 1
output:
098d134608c94f7413faac591054ee35 4
result:
ok Correct answer: answer = 4
Test #3:
score: 0
Accepted
time: 0ms
memory: 9672kb
input:
2 2 2 0 0 1 0
output:
098d134608c94f7413faac591054ee35 4
result:
ok Correct answer: answer = 4
Test #4:
score: 0
Accepted
time: 1ms
memory: 9100kb
input:
2 3 2 0 1 1 1
output:
098d134608c94f7413faac591054ee35 4
result:
ok Correct answer: answer = 4
Test #5:
score: 0
Accepted
time: 0ms
memory: 10124kb
input:
4 4 4 1 3 0 1 2 1 2 2
output:
098d134608c94f7413faac591054ee35 12
result:
ok Correct answer: answer = 12
Test #6:
score: 0
Accepted
time: 1ms
memory: 9764kb
input:
5 8 5 0 5 2 6 7 4 4 5 2 6
output:
098d134608c94f7413faac591054ee35 52
result:
ok Correct answer: answer = 52
Test #7:
score: 0
Accepted
time: 0ms
memory: 10876kb
input:
8 20 8 6 14 5 13 1 8 17 15 6 9 1 9 2 0 17 8
output:
098d134608c94f7413faac591054ee35 210
result:
ok Correct answer: answer = 210
Test #8:
score: 0
Accepted
time: 0ms
memory: 10048kb
input:
10 10 10 2 2 3 6 8 6 8 3 6 9 4 0 8 4 8 1 0 8 8 9
output:
098d134608c94f7413faac591054ee35 88
result:
ok Correct answer: answer = 88
Test #9:
score: 0
Accepted
time: 2ms
memory: 10148kb
input:
10 100 10 98 25 55 31 36 25 38 77 9 82 11 69 88 42 47 49 19 91 61 13
output:
098d134608c94f7413faac591054ee35 7696
result:
ok Correct answer: answer = 7696
Test #10:
score: 0
Accepted
time: 2ms
memory: 10080kb
input:
50 1 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
098d134608c94f7413faac591054ee35 1
result:
ok Correct answer: answer = 1
Test #11:
score: 0
Accepted
time: 2ms
memory: 9816kb
input:
50 50 50 25 25 44 12 46 47 4 26 10 35 10 3 13 27 14 16 6 28 10 0 27 46 2 19 10 36 29 49 13 16 6 38 32 48 33 33 47 45 8 13 5 21 14 25 21 41 47 49 26 7 4 7 5 34 5 24 16 24 18 26 29 10 32 39 14 39 35 32 11 1 49 17 24 18 38 14 32 48 46 1 45 46 17 36 29 31 24 48 12 33 4 44 38 32 11 6 25 47 9 49
output:
098d134608c94f7413faac591054ee35 2374
result:
ok Correct answer: answer = 2374
Test #12:
score: 0
Accepted
time: 0ms
memory: 10308kb
input:
50 100 50 0 20 49 26 21 27 10 67 79 9 38 75 39 27 36 51 75 81 70 37 57 74 57 64 13 76 53 95 25 11 62 37 78 38 39 19 46 7 92 71 40 27 73 11 30 55 60 67 79 48 3 69 1 27 41 54 80 40 50 50 9 49 75 11 90 62 2 71 14 40 30 48 3 53 68 24 99 25 8 49 35 80 31 24 21 11 92 9 4 97 45 61 56 83 68 75 35 84 77 20
output:
098d134608c94f7413faac591054ee35 9502
result:
ok Correct answer: answer = 9502
Test #13:
score: 0
Accepted
time: 1ms
memory: 9440kb
input:
49 7 49 5 3 0 6 6 2 3 3 4 2 3 4 0 3 1 3 2 4 5 1 1 0 2 1 3 0 4 4 1 6 0 5 1 4 6 3 6 6 6 5 4 0 3 5 5 5 2 0 4 5 3 2 0 2 1 5 2 5 6 4 1 1 5 0 0 4 6 0 5 4 2 6 0 1 5 2 4 6 5 6 3 1 3 6 0 0 4 3 1 2 2 2 4 1 2 3 6 1
output:
098d134608c94f7413faac591054ee35 49
result:
ok Correct answer: answer = 49
Test #14:
score: -4
Wrong Answer
time: 0ms
memory: 11024kb
input:
50 51 50 38 39 6 7 44 45 24 25 30 31 25 26 49 50 10 11 18 19 36 37 7 8 15 16 21 22 32 33 13 14 5 6 11 12 45 46 48 49 47 48 28 29 26 27 40 41 14 15 33 34 23 24 2 3 12 13 19 20 46 47 8 9 35 36 4 5 42 43 39 40 20 21 1 2 37 38 34 35 41 42 22 23 27 28 0 1 31 32 9 10 16 17 29 30 17 18 43 44 3 4
output:
098d134608c94f7413faac591054ee35 756
result:
wrong answer Wrong answer: output = 756, expected = 151
Subtask #2:
score: 0
Wrong Answer
Test #23:
score: 12
Accepted
time: 2ms
memory: 10812kb
input:
2 2 1 0 0 1 1
output:
098d134608c94f7413faac591054ee35 4
result:
ok Correct answer: answer = 4
Test #24:
score: 0
Accepted
time: 0ms
memory: 10028kb
input:
4 3 2 0 0 0 0 0 0 0 0
output:
098d134608c94f7413faac591054ee35 1
result:
ok Correct answer: answer = 1
Test #25:
score: 0
Accepted
time: 2ms
memory: 9856kb
input:
5 5 2 2 2 3 3 4 4 3 3 3 3
output:
098d134608c94f7413faac591054ee35 5
result:
ok Correct answer: answer = 5
Test #26:
score: -12
Wrong Answer
time: 2ms
memory: 9660kb
input:
10 20 3 3 3 15 15 10 10 18 18 4 4 7 7 15 15 2 2 10 10 7 7
output:
098d134608c94f7413faac591054ee35 34
result:
wrong answer Wrong answer: output = 34, expected = 41
Subtask #3:
score: 0
Skipped
Dependency #1:
0%
Subtask #4:
score: 0
Skipped
Dependency #1:
0%
Subtask #5:
score: 0
Skipped
Dependency #1:
0%
Subtask #6:
score: 0
Skipped
Dependency #1:
0%