QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#85890 | #5667. Meeting Places | SpaceJellyfish | TL | 15ms | 11556kb | C++17 | 3.5kb | 2023-03-08 20:34:58 | 2023-03-08 20:37:02 |
Judging History
answer
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <cfloat>
#define eps 1e-9
using namespace std;
const int N = 2001, T = 8e8;
const int Mod = 2147483647;
const int base = 233811181;
int Read() {
int x = 0, f = 1;
char ch = getchar();
while (!isdigit(ch) && ch != '-')
ch = getchar();
if (ch == '-')
f = -1, ch = getchar();
while (isdigit(ch))
x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
return (f == -1) ? -x : x;
}
int n, k, x[N], y[N];
double r;
struct point {
double x, y;
} p[N], o;
double sqr(double x) { return x * x; }
double dis(point a, point b) {
return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
}
bool cmp(double a, double b) { return fabs(a - b) < eps; }
double s[N][N];
point geto(point a, point b, point c) {
double a1, a2, b1, b2, c1, c2;
point ans;
a1 = 2 * (b.x - a.x), b1 = 2 * (b.y - a.y),
c1 = sqr(b.x) - sqr(a.x) + sqr(b.y) - sqr(a.y);
a2 = 2 * (c.x - a.x), b2 = 2 * (c.y - a.y),
c2 = sqr(c.x) - sqr(a.x) + sqr(c.y) - sqr(a.y);
if (cmp(a1, 0)) {
ans.y = c1 / b1;
ans.x = (c2 - ans.y * b2) / a2;
} else if (cmp(b1, 0)) {
ans.x = c1 / a1;
ans.y = (c2 - ans.x * a2) / b2;
} else {
ans.x = (c2 * b1 - c1 * b2) / (a2 * b1 - a1 * b2);
ans.y = (c2 * a1 - c1 * a2) / (b2 * a1 - b1 * a2);
}
return ans;
}
double dp_before[N], dp_cur[N];
void compute(int l, int r, int optl, int optr) {
if (l > r) return;
int mid = (l + r) >> 1;
pair<double, int> best = {DBL_MAX, -1};
for (int k = optl; k <= min(mid, optr); k++) {
best = min(best, {dp_before[k] + s[k + 1][mid], k});
}
dp_cur[mid] = best.first;
int opt = best.second;
compute(l, mid - 1, optl, opt);
compute(mid + 1, r, opt, optr);
}
signed main() {
n = Read(), k = Read(), x[1] = Read();
y[1] = (1ll * x[1] * base + 1) % Mod;
p[1].x = x[1];
p[1].y = y[1];
for (int i = 2; i <= n; i++) {
x[i] = (1ll * y[i - 1] * base + 1) % Mod;
y[i] = (1ll * x[i] * base + 1) % Mod;
p[i].x = x[i];
p[i].y = y[i];
}
double ans = 0;
for (int l = n; l > 0; l--) {
r = 0;
o = p[l];
for (int i = l; i <= n; i++) {
if (dis(o, p[i]) < r || cmp(dis(o, p[i]), r)){
s[l][i] = r;
continue;
}
o.x = (p[i].x + p[l].x) / 2;
o.y = (p[i].y + p[l].y) / 2;
r = dis(p[i], p[l]) / 2;
for (int j = l + 1; j < i; j++) {
if (dis(o, p[j]) < r || cmp(dis(o, p[j]), r))
continue;
o.x = (p[i].x + p[j].x) / 2;
o.y = (p[i].y + p[j].y) / 2;
r = dis(p[i], p[j]) / 2;
for (int k = l; k < j; k++) {
if (dis(o, p[k]) < r || cmp(dis(o, p[k]), r))
continue;
o = geto(p[i], p[j], p[k]);
r = dis(o, p[i]);
}
}
s[l][i] = r;
}
}
for (int i = 1; i <= n; i++)
dp_cur[i] = DBL_MAX;
int t = T / (n * k);
while (k--) {
memcpy(dp_before, dp_cur, sizeof(dp_cur));
compute(1, n, 0, n - 1);
for (int i = 1; i <= n; i++)
for (int d = 1; d <= t && i - d >= 0; d++)
dp_cur[i] = min(dp_cur[i], dp_before[i - d] + s[i - d + 1][i]);
}
printf("%.10lf", dp_cur[n]);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 4052kb
input:
100 23 213
output:
1319350480.8007326126
result:
ok found '1319350480.8007326', expected '1319350480.8007326', error '0.0000000'
Test #2:
score: 0
Accepted
time: 2ms
memory: 3900kb
input:
10 1 1060
output:
1042753143.3451676369
result:
ok found '1042753143.3451676', expected '1042753143.3451676', error '0.0000000'
Test #3:
score: 0
Accepted
time: 2ms
memory: 3812kb
input:
10 10 2373
output:
0.0000000000
result:
ok found '0.0000000', expected '0.0000000', error '-0.0000000'
Test #4:
score: 0
Accepted
time: 1ms
memory: 3908kb
input:
10 2 3396
output:
1236610536.9469230175
result:
ok found '1236610536.9469230', expected '1236610536.9469230', error '0.0000000'
Test #5:
score: 0
Accepted
time: 2ms
memory: 3768kb
input:
10 3 1998
output:
973790809.8224442005
result:
ok found '973790809.8224442', expected '973790809.8224442', error '0.0000000'
Test #6:
score: 0
Accepted
time: 2ms
memory: 3776kb
input:
10 4 562
output:
910867389.9069330692
result:
ok found '910867389.9069331', expected '910867389.9069330', error '0.0000000'
Test #7:
score: 0
Accepted
time: 2ms
memory: 3900kb
input:
10 5 6048
output:
818240814.7105150223
result:
ok found '818240814.7105150', expected '818240814.7105150', error '0.0000000'
Test #8:
score: 0
Accepted
time: 2ms
memory: 3696kb
input:
10 6 2524
output:
500106979.3467763662
result:
ok found '500106979.3467764', expected '500106979.3467762', error '0.0000000'
Test #9:
score: 0
Accepted
time: 2ms
memory: 3624kb
input:
10 7 5415
output:
559478971.4320058823
result:
ok found '559478971.4320059', expected '559478971.4320059', error '0.0000000'
Test #10:
score: 0
Accepted
time: 2ms
memory: 3660kb
input:
10 8 1438
output:
500309745.4627699852
result:
ok found '500309745.4627700', expected '500309745.4627700', error '0.0000000'
Test #11:
score: 0
Accepted
time: 2ms
memory: 3900kb
input:
10 9 3172
output:
162279748.8753451705
result:
ok found '162279748.8753452', expected '162279748.8753452', error '0.0000000'
Test #12:
score: 0
Accepted
time: 2ms
memory: 4180kb
input:
100 1 8316
output:
1320052902.1522903442
result:
ok found '1320052902.1522903', expected '1320052902.1522903', error '0.0000000'
Test #13:
score: 0
Accepted
time: 3ms
memory: 4308kb
input:
100 100 4179
output:
0.0000000000
result:
ok found '0.0000000', expected '0.0000000', error '-0.0000000'
Test #14:
score: 0
Accepted
time: 2ms
memory: 4100kb
input:
100 12 3405
output:
1329687126.1304550171
result:
ok found '1329687126.1304550', expected '1329687126.1304548', error '0.0000000'
Test #15:
score: 0
Accepted
time: 1ms
memory: 4104kb
input:
100 16 8378
output:
1338056514.4842693806
result:
ok found '1338056514.4842694', expected '1338056514.4842694', error '0.0000000'
Test #16:
score: 0
Accepted
time: 2ms
memory: 4216kb
input:
100 2 1858
output:
1310392496.1430580616
result:
ok found '1310392496.1430581', expected '1310392496.1430581', error '0.0000000'
Test #17:
score: 0
Accepted
time: 2ms
memory: 4060kb
input:
100 25 4596
output:
1440464106.6229298115
result:
ok found '1440464106.6229298', expected '1440464106.6229298', error '0.0000000'
Test #18:
score: 0
Accepted
time: 2ms
memory: 4180kb
input:
100 3 5633
output:
1399621082.6142737865
result:
ok found '1399621082.6142738', expected '1399621082.6142738', error '0.0000000'
Test #19:
score: 0
Accepted
time: 3ms
memory: 4056kb
input:
100 32 7827
output:
1342073760.5322329998
result:
ok found '1342073760.5322330', expected '1342073760.5322330', error '0.0000000'
Test #20:
score: 0
Accepted
time: 1ms
memory: 4216kb
input:
100 4 3693
output:
1339808706.7098686695
result:
ok found '1339808706.7098687', expected '1339808706.7098689', error '0.0000000'
Test #21:
score: 0
Accepted
time: 1ms
memory: 4060kb
input:
100 5 2252
output:
1394874243.5057041645
result:
ok found '1394874243.5057042', expected '1394874243.5057042', error '0.0000000'
Test #22:
score: 0
Accepted
time: 1ms
memory: 4172kb
input:
100 50 4254
output:
1322809748.4052836895
result:
ok found '1322809748.4052837', expected '1322809748.4052832', error '0.0000000'
Test #23:
score: 0
Accepted
time: 2ms
memory: 4068kb
input:
100 6 53
output:
1364441356.1700987816
result:
ok found '1364441356.1700988', expected '1364441356.1700988', error '0.0000000'
Test #24:
score: 0
Accepted
time: 1ms
memory: 4008kb
input:
100 64 4337
output:
1180754550.2422838211
result:
ok found '1180754550.2422838', expected '1180754550.2422838', error '0.0000000'
Test #25:
score: 0
Accepted
time: 2ms
memory: 4072kb
input:
100 7 5366
output:
1423557626.3586797714
result:
ok found '1423557626.3586798', expected '1423557626.3586798', error '0.0000000'
Test #26:
score: 0
Accepted
time: 2ms
memory: 4216kb
input:
100 8 8509
output:
1353289305.3519957066
result:
ok found '1353289305.3519957', expected '1353289305.3519957', error '0.0000000'
Test #27:
score: 0
Accepted
time: 3ms
memory: 4068kb
input:
100 9 1423
output:
1228887266.5661668777
result:
ok found '1228887266.5661669', expected '1228887266.5661671', error '0.0000000'
Test #28:
score: 0
Accepted
time: 1ms
memory: 4308kb
input:
100 91 4806
output:
656574218.5086755753
result:
ok found '656574218.5086756', expected '656574218.5086756', error '0.0000000'
Test #29:
score: 0
Accepted
time: 0ms
memory: 4072kb
input:
100 92 4024
output:
794693428.6162240505
result:
ok found '794693428.6162241', expected '794693428.6162238', error '0.0000000'
Test #30:
score: 0
Accepted
time: 3ms
memory: 4156kb
input:
100 93 606
output:
677641787.4863121510
result:
ok found '677641787.4863122', expected '677641787.4863122', error '0.0000000'
Test #31:
score: 0
Accepted
time: 1ms
memory: 4052kb
input:
100 94 7265
output:
686423239.2626028061
result:
ok found '686423239.2626028', expected '686423239.2626028', error '0.0000000'
Test #32:
score: 0
Accepted
time: 3ms
memory: 4304kb
input:
100 95 8469
output:
328187125.9235950708
result:
ok found '328187125.9235951', expected '328187125.9235951', error '0.0000000'
Test #33:
score: 0
Accepted
time: 2ms
memory: 4168kb
input:
100 96 1079
output:
492964787.6259083748
result:
ok found '492964787.6259084', expected '492964787.6259086', error '0.0000000'
Test #34:
score: 0
Accepted
time: 3ms
memory: 4000kb
input:
100 97 5453
output:
258652807.7906568050
result:
ok found '258652807.7906568', expected '258652807.7906564', error '0.0000000'
Test #35:
score: 0
Accepted
time: 3ms
memory: 4000kb
input:
100 98 1778
output:
159490192.1188908219
result:
ok found '159490192.1188908', expected '159490192.1188908', error '0.0000000'
Test #36:
score: 0
Accepted
time: 4ms
memory: 4072kb
input:
100 99 1825
output:
33793756.3289980441
result:
ok found '33793756.3289980', expected '33793756.3289980', error '0.0000000'
Test #37:
score: 0
Accepted
time: 15ms
memory: 11556kb
input:
1000 1 2453
output:
1486878333.2858574390
result:
ok found '1486878333.2858574', expected '1486878333.2858574', error '0.0000000'
Test #38:
score: -100
Time Limit Exceeded
input:
1000 1000 1798