QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#109911 | #360. Cultivation | bashkort | 0 | 2ms | 3568kb | C++20 | 4.7kb | 2023-05-30 22:57:10 | 2023-05-30 22:57:13 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int inf = 1e9 + 7;
array<int, 3> operator+(const array<int, 3> &a, const array<int, 3> &b) {
return {max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])};
}
constexpr array<int, 3> neut = {inf, inf, 2 * inf};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int R, C, n;
cin >> R >> C >> n;
vector<pair<int, int>> pt(n);
vector<int> x(n), y(n);
for (int i = 0; i < n; ++i) {
cin >> x[i] >> y[i];
--x[i], --y[i];
pt[i] = {x[i], y[i]};
}
sort(pt.begin(), pt.end());
for (int i = 0; i < n; ++i) {
x[i] = pt[i].first;
y[i] = pt[i].second;
}
vector mx(n + 1, vector<array<int, 3>>(n + 1, neut));
for (int i = 0; i < n; ++i) {
multiset<int> sy, diff;
sy.insert(-1), sy.insert(C);
diff.insert(C);
auto ins = [&](int i) {
if (i == n) {
return;
}
auto it = sy.lower_bound(y[i]);
int nxt = *it, prv = *prev(it);
diff.extract(nxt - prv - 1);
diff.insert(y[i] - prv - 1);
diff.insert(nxt - y[i] - 1);
sy.insert(y[i]);
};
for (int j = i; j < n; ++j) {
ins(j);
int fi = *next(sy.begin());
int la = *next(sy.rbegin());
mx[i][j] = {fi, C - la - 1, *diff.rbegin()};
}
}
int ans = R + C;
auto upd = [&](const array<int, 3> &a, int s) {
ans = min<ll>(ans, max<ll>(a[0] + a[1], a[2]) + s);
};
auto check = [&](int s) -> array<int, 3> {
if (s >= R) {
return {};
}
array<int, 3> now{};
auto relax = [&](int i, int j) {
if (i >= j) {
now = neut;
} else {
now = now + mx[i][j - 1];
}
};
if (x[0] > s || x.back() + s + 1 < R) {
return neut;
}
for (int i = 0, j = 0; i < n; ++i) {
while (j < n && x[j] - x[i] - 1 <= s) {
j += 1;
}
relax(i, j);
if (x[i] + s + 1 >= R) {
break;
}
if (j == n || x[j] != x[i] + s + 1) {
relax(i + 1, j);
}
}
return now;
};
auto checku = [&](int u) -> array<int, 3> {
if (x[0] > u) {
return neut;
}
int j = 0;
while (j < n && x[j] <= u) {
j += 1;
}
return mx[0][j - 1];
};
auto checkd = [&](int d) -> array<int, 3> {
if (x.back() + d + 1 < R) {
return neut;
}
int j = n;
while (j > 0 && x[j - 1] + d + 1 >= R) {
j -= 1;
}
return mx[j][n - 1];
};
vector<int> us, ds, sums;
for (int i = 0; i < n; ++i) {
us.push_back(x[i]);
ds.push_back(R - x[i] - 1);
for (int j = 0; j < n; ++j) {
if (x[j] > x[i]) {
sums.push_back(x[j] - x[i] - 1);
}
}
}
us.push_back(0);
ds.push_back(0);
sums.push_back(0);
sort(us.begin(), us.end());
sort(ds.begin(), ds.end());
sort(sums.begin(), sums.end());
us.resize(unique(us.begin(), us.end()) - us.begin());
ds.resize(unique(ds.begin(), ds.end()) - ds.begin());
sums.resize(unique(sums.begin(), sums.end()) - sums.begin());
vector<array<int, 3>> cu, cd, cs;
for (int u : us) {
cu.push_back(checku(u));
}
for (int d : ds) {
cd.push_back(checkd(d));
}
for (int s : sums) {
cs.push_back(check(s));
}
for (int i = 0; i < size(cu); ++i) {
for (int j = 0; j < size(cd); ++j) {
int s = us[i] + ds[j];
int is = upper_bound(sums.begin(), sums.end(), s) - sums.begin() - 1;
upd(cu[i] + cd[j] + cs[is], us[i] + ds[j]);
}
}
for (int i = 0; i < size(cs); ++i) {
for (int j = 0; j < size(cd); ++j) {
if (sums[i] >= ds[j]) {
int u = sums[i] - ds[j];
int iu = upper_bound(us.begin(), us.end(), u) - us.begin() - 1;
upd(cs[i] + cd[j] + cu[iu], sums[i]);
}
}
for (int j = 0; j < size(cu); ++j) {
if (sums[i] >= us[j]) {
int d = sums[i] - us[j];
int id = upper_bound(ds.begin(), ds.end(), d) - ds.begin() - 1;
upd(cs[i] + cu[j] + cd[id], sums[i]);
}
}
}
cout << ans << '\n';
return 0;
}
详细
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 2ms
memory: 3440kb
input:
2 4 2 1 1 1 4
output:
6
result:
wrong answer 1st lines differ - expected: '3', found: '6'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Skipped
Dependency #2:
0%
Subtask #4:
score: 0
Wrong Answer
Test #45:
score: 30
Accepted
time: 2ms
memory: 3460kb
input:
1000000000 1000000000 17 822413671 70423910 260075513 431043546 300945721 793553248 142848049 163787897 392462410 831950868 699005697 111397300 444396260 130450496 642691616 595456084 467968916 463598810 159764248 611476406 929313754 539645102 365153650 964108073 906780716 373514044 970118116 655138...
output:
852626202
result:
ok single line: '852626202'
Test #46:
score: 0
Accepted
time: 2ms
memory: 3500kb
input:
1000000000 1000000000 24 382358372 812500277 617637090 687506454 441176760 562497727 382346048 687504690 205880053 312504652 794110577 62497634 264714161 937490675 970587944 812502893 617647581 62504110 852944701 812498007 88227293 187492617 558814156 687495577 29403236 812494493 911761865 187491781...
output:
904419459
result:
ok single line: '904419459'
Test #47:
score: 0
Accepted
time: 2ms
memory: 3500kb
input:
1000000000 1000000000 25 59999964 299999989 740000035 100000111 139999972 499999797 740000159 899999809 940000104 899999905 459999870 299999853 139999925 899999750 260000183 300000150 260000200 699999915 940000072 99999821 340000223 900000130 739999776 499999813 59999984 700000029 539999767 90000023...
output:
480000793
result:
ok single line: '480000793'
Test #48:
score: 0
Accepted
time: 1ms
memory: 3568kb
input:
1000000000 1000000000 25 496770868 499466029 150245306 140351260 443861207 442170127 915815913 907024280 592352731 580300173 614771420 602707761 545759771 564678204 790963611 795646738 466306333 474998682 700037062 710428701 326403486 341417980 13108429 18468915 296795338 282907012 207909366 2192548...
output:
1967193239
result:
ok single line: '1967193239'
Test #49:
score: 0
Accepted
time: 2ms
memory: 3524kb
input:
1000000000 1000000000 25 508699723 917649746 972134563 24654272 591574312 768222747 342111766 678842208 280650655 335101574 112108587 538128714 232733100 741988808 569340416 313541403 333183415 646381341 348331220 239049882 321253252 46884019 458715217 456559440 11396102 588839952 212356188 55359081...
output:
967430445
result:
ok single line: '967430445'
Test #50:
score: 0
Accepted
time: 2ms
memory: 3512kb
input:
1000000000 1000000000 25 87500002 928571428 712500002 71428571 212500002 71428570 837500001 71428573 912499999 214285715 287500002 785714285 37500003 785714285 962500002 357142856 787500000 785714288 787500003 500000003 462500002 71428570 462500001 357142859 37499999 500000000 462500002 642857144 37...
output:
660714282
result:
ok single line: '660714282'
Test #51:
score: -30
Wrong Answer
time: 1ms
memory: 3456kb
input:
1000000000 1000000000 25 499999999 565789472 499999990 250000002 499999996 749999995 499999999 144736850 499999993 513157893 499999992 644736853 500000010 13157889 499999998 118421056 499999993 197368414 499999990 592105269 499999994 486842107 500000005 276315783 499999994 539473685 499999990 618421...
output:
2000000000
result:
wrong answer 1st lines differ - expected: '1131578975', found: '2000000000'
Subtask #5:
score: 0
Skipped
Dependency #4:
0%
Subtask #6:
score: 0
Skipped
Dependency #1:
0%