QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#301303 | #5054. City Brain | zzuqy# | WA | 403ms | 102224kb | C++14 | 3.2kb | 2024-01-09 17:32:10 | 2024-01-09 17:32:11 |
Judging History
answer
#include <bits/stdc++.h>
#define N 5009
using namespace std;
vector<int>to[N];
int n, m, k;
int d[N][N];
void bfs(int st) {
queue<int>q;
q.push(st);
d[st][st] = 0;
while (!q.empty()) {
int x = q.front();
q.pop();
for (auto y : to[x]) {
if (d[st][y] != 1000000000)
continue;
d[st][y] = d[st][x] + 1;
q.push(y);
}
}
}
long double s2 = 1.414213562373095048;
double calc(int a, int b, int kt) {
if (a == 0 && b == 0)
return 0;
kt += a + b;
if (b == 0)
return 1.0 * (kt % a) / (kt / a + 1) + 1.0 * (a - kt % a) / (kt / a);
if (a == 0)
return 2.0 * (kt % b) / (kt / b + 1) + 2.0 * (b - kt % b) / (kt / b);
double ans = 1000000000;
if (a >= b) {
int ttmp = (int)(kt / (a + s2 * b));
for (int ta = max(ttmp - 10, 1); ta <= min((kt - b) / a, ttmp + 10); ta++) {
for (int tb = max((kt - ta * a) / b - 10, 1); tb <= (kt - ta * a) / b; tb++) {
double tmp = 1.0 * a / ta + 2.0 * b / tb;
if (1ll * tb * (tb + 1) > 2ll * ta * (ta + 1)) {
if (kt - a * ta - b * tb >= a)
continue;
tmp -= (kt - a * ta - b * tb) * 1.0 / ta / (ta + 1);
} else {
if (kt - a * ta - b * tb >= b)
continue;
tmp -= (kt - a * ta - b * tb) * 2.0 / tb / (tb + 1);
//flag |= 2;
}
if (tmp < ans)
ans = tmp;
}
//cout << ta << " " << ta << endl;
}
} else {
int ttmp = (int)(kt / (a + s2 * b) * s2);
for (int tb = max(ttmp - 10, 1); tb <= min((kt - a) / b, ttmp + 10); tb++) {
for (int ta = max((kt - tb * b) / a - 10, 1); ta <= (kt - tb * b) / a; ta++) {
//cout << ta << " " << ta << endl;
double tmp = 1.0 * a / ta + 2.0 * b / tb;
if (1ll * tb * (tb + 1) > 2ll * ta * (ta + 1)) {
if (kt - a * ta - b * tb >= a)
continue;
tmp -= (kt - a * ta - b * tb) * 1.0 / ta / (ta + 1);
} else {
if (kt - a * ta - b * tb >= b)
continue;
tmp -= (kt - a * ta - b * tb) * 2.0 / tb / (tb + 1);
//flag |= 2;
}
if (tmp < ans)
ans = tmp;
}
}
}
//cout << 1.0 * mntb / mnta << endl;
return ans;
}
int mn[N];
int main() {
cin >> n >> m >> k;
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
to[a].push_back(b);
to[b].push_back(a);
}
fill(d[0], d[0] + N * N, 1000000000);
for (int i = 1; i <= n; i++)
bfs(i);
/*
for (int i = 1; i <= n; i++, cout << endl)
for (int j = 1; j <= n; j++)
cout << d[i][j] << " ";
*/
int s1, t1, s2, t2;
cin >> s1 >> t1 >> s2 >> t2;
fill(mn, mn + N, 1000000000);
mn[0] = d[s1][t1] + d[s2][t2];
for (int a = 1; a <= n; a++) {
for (int b = 1; b <= n; b++) {
if (d[s1][a] == 1000000000 || d[b][t1] == 1000000000 || d[a][b] == 1000000000)
continue;
if (d[s2][a] == 1000000000 || d[b][t2] == 1000000000)
continue;
mn[d[a][b]] = min(mn[d[a][b]], d[s1][a] + d[b][t1] + d[s2][a] + d[b][t2]);
mn[d[a][b]] = min(mn[d[a][b]], d[s1][a] + d[b][t1] + d[s2][b] + d[a][t2]);
}
}
double ans = 1000000000;
for (int i = 0; i <= n; i++) {
if (mn[i] == 1000000000)
continue;
//0cout << mn[i] << " " << i << " " << calc(mn[i], i, k) << endl;
ans = min(ans, calc(mn[i], i, k));
}
cout << fixed << setprecision(15) << ans;
}
/*
6 5 1
1 2
3 2
2 4
4 5
4 6
1 5 3 6
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 8ms
memory: 101916kb
input:
6 5 1 1 2 3 2 2 4 4 5 4 6 1 5 3 6
output:
5.000000000000000
result:
ok found '5.000000000', expected '5.000000000', error '0.000000000'
Test #2:
score: 0
Accepted
time: 0ms
memory: 102068kb
input:
1 0 100 1 1 1 1
output:
0.000000000000000
result:
ok found '0.000000000', expected '0.000000000', error '-0.000000000'
Test #3:
score: 0
Accepted
time: 8ms
memory: 101876kb
input:
4 2 3 1 2 3 4 1 2 3 4
output:
0.833333333333333
result:
ok found '0.833333333', expected '0.833333333', error '0.000000000'
Test #4:
score: 0
Accepted
time: 3ms
memory: 101880kb
input:
6 5 1 1 2 3 2 2 4 4 5 4 6 1 5 6 3
output:
5.000000000000000
result:
ok found '5.000000000', expected '5.000000000', error '0.000000000'
Test #5:
score: 0
Accepted
time: 157ms
memory: 102224kb
input:
5000 4999 1000000000 1 2 1 3 1 4 1 5 6 2 7 3 8 4 9 5 10 6 11 7 12 8 13 9 14 10 15 11 16 12 17 13 18 14 19 15 20 16 21 17 22 18 23 19 24 20 25 21 26 22 27 23 28 24 29 25 30 26 31 27 32 28 33 29 34 30 35 31 36 32 37 33 38 34 39 35 40 36 41 37 42 38 43 39 44 40 45 41 46 42 47 43 48 44 49 45 50 46 51 47...
output:
0.024989876075614
result:
ok found '0.024989876', expected '0.024989876', error '0.000000000'
Test #6:
score: 0
Accepted
time: 4ms
memory: 101948kb
input:
10 9 305097549 2 1 8 9 6 7 5 4 8 7 4 3 2 3 9 10 6 5 4 3 2 1
output:
0.000000013110561
result:
ok found '0.000000013', expected '0.000000013', error '0.000000000'
Test #7:
score: 0
Accepted
time: 7ms
memory: 101868kb
input:
10 9 9 4 2 3 6 8 6 2 1 7 9 5 2 2 3 10 9 7 4 8 7 9 5
output:
3.833333333333333
result:
ok found '3.833333333', expected '3.833333333', error '0.000000000'
Test #8:
score: 0
Accepted
time: 7ms
memory: 102004kb
input:
10 9 19 5 2 4 1 2 1 6 5 10 8 8 1 9 3 7 6 1 3 7 7 6 4
output:
0.700000000000000
result:
ok found '0.700000000', expected '0.700000000', error '0.000000000'
Test #9:
score: 0
Accepted
time: 0ms
memory: 101952kb
input:
100 99 149 82 77 11 14 99 94 29 24 41 31 52 57 64 73 42 32 85 84 88 86 54 59 75 66 38 28 92 90 9 19 60 61 24 19 24 31 21 18 38 47 67 74 79 89 64 66 34 29 23 16 87 83 11 16 2 4 10 11 76 77 36 32 18 22 71 72 79 77 97 96 47 48 43 34 63 55 51 45 91 94 3 1 31 39 41 44 51 58 6 10 48 54 74 76 7 15 18 13 32...
output:
1.805982905982906
result:
ok found '1.805982906', expected '1.805982906', error '0.000000000'
Test #10:
score: 0
Accepted
time: 0ms
memory: 101980kb
input:
100 99 126 23 98 27 75 2 7 81 83 10 13 99 3 10 7 70 56 28 16 3 15 18 16 51 55 1 33 6 3 53 61 3 1 68 76 68 85 26 79 40 86 28 37 25 16 12 14 23 48 22 3 66 96 16 39 41 90 69 100 97 89 37 84 51 37 32 25 36 14 35 21 67 20 7 27 23 31 4 23 32 34 44 1 66 23 95 70 42 73 26 7 19 38 93 58 39 88 2 65 1 12 81 2 ...
output:
0.272727272727273
result:
ok found '0.272727273', expected '0.272727273', error '0.000000000'
Test #11:
score: 0
Accepted
time: 300ms
memory: 102184kb
input:
5000 4999 7363 4100 4099 2570 2569 494 493 608 609 3424 3423 1771 1770 4935 4934 1536 1537 2704 2703 2429 2428 4048 4049 2708 2709 3982 3981 1866 1867 1779 1780 1491 1490 3719 3720 3960 3959 1515 1516 2157 2158 3798 3799 4624 4625 2626 2627 4882 4883 2769 2770 4999 4998 514 513 3236 3237 3424 3425 2...
output:
365.899999999999977
result:
ok found '365.900000000', expected '365.900000000', error '0.000000000'
Test #12:
score: -100
Wrong Answer
time: 403ms
memory: 102144kb
input:
5000 4999 1713 4590 4518 4868 4954 2977 2986 2091 2190 458 540 1668 1738 2670 2760 371 441 4778 4800 4282 4347 534 557 1560 1498 2444 2430 4602 4520 1361 1457 4934 4918 963 984 2305 2274 798 842 4150 4174 1102 1038 1264 1234 115 175 4994 4901 3375 3459 530 468 1517 1480 1080 1150 4637 4568 2456 2414...
output:
6.702859477124183
result:
wrong answer 1st numbers differ - expected: '6.6261189', found: '6.7028595', error = '0.0115815'