QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#131910#2784. Aliensvalerikk#0 2ms11024kbC++172.4kb2023-07-28 22:09:012024-07-04 01:01:26

Judging History

你现在查看的是最新测评结果

  • [2024-07-04 01:01:26]
  • 评测
  • 测评结果:0
  • 用时:2ms
  • 内存:11024kb
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-28 22:09:01]
  • 提交

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%