QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#587251 | #5054. City Brain | hcywoi | WA | 1235ms | 101344kb | C++23 | 3.1kb | 2024-09-24 18:51:01 | 2024-09-24 18:51:02 |
Judging History
answer
#include <bits/stdc++.h>
using i64 = long long;
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n, m, k;
std::cin >> n >> m >> k;
std::vector<std::vector<int>> adj(n);
for (int i = 0; i < m; i ++ ) {
int u, v;
std::cin >> u >> v;
u --, v -- ;
adj[u].push_back(v);
adj[v].push_back(u);
}
int s1, t1, s2, t2;
std::cin >> s1 >> t1 >> s2 >> t2;
s1 --, t1 --, s2 --, t2 -- ;
std::vector dis(n, std::vector<int>(n, 1E9));
for (int i = 0; i < n; i ++ ) {
std::queue<int> q;
q.push(i);
dis[i][i] = 0;
while (!q.empty()) {
int x = q.front();
q.pop();
for (auto y : adj[x]) {
if (dis[i][y] > dis[i][x] + 1) {
dis[i][y] = dis[i][x] + 1;
q.push(y);
}
}
}
}
long double ans;
int d0 = dis[s1][t1], d1 = dis[s2][t2];
if (d0 + d1 == 0) {
ans = 0;
} else {
int t = k / (d0 + d1);
int rmain = k % (d0 + d1);
ans = 1. / (t + 1) * (d0 + d1 - rmain) + 1. / (t + 2) * rmain;
}
std::vector<int> d(n, 1E9);
for (int s = 0; s < n; s ++ ) {
for (int t = 0; t < n; t ++ ) {
int both = dis[s][t];
int dis1 = std::min(dis[s1][s] + dis[t][t1], dis[s1][t] + dis[s][t1]);
int dis2 = std::min(dis[s2][s] + dis[t][t2], dis[s2][t] + dis[s][t2]);
// std::cerr << s << " " << t << " " << both << " " << dis1 << " " << dis2 << "\n";
if (both == 0 || both >= n) {
continue;
}
d[both] = std::min(d[both], dis1 + dis2);
}
}
for (int i = 1; i < n; i ++ ) {
// std::cerr << i << " " << d[i] << "\n";
if (d[i] >= n * 2) {
continue;
}
auto f = [&](int x) -> long double {
if (1LL * x * i > k) {
return 1E18;
}
int nk = k - x * i;
long double ans = 1E18;
for (int j = 0; j <= std::min(nk, i - 1); j ++ ) {
long double res = 2. / (x + 1) * i - 2. / (x + 1) / (x + 2) * j;
int nnk = nk;
nnk -= j;
if (d[i] > 0) {
int t = nnk / d[i];
res += 1. / (t + 1) * d[i];
nnk -= t * d[i];
res -= nnk * 1. / (t + 1) / (t + 2);
}
ans = std::min(ans, res);
}
return ans;
};
int lo = 0, hi = k;
while (lo <= hi) {
int m = (hi - lo) / 3;
int l = lo + m, r = hi - m;
if (f(l) > f(r)) {
ans = std::min(ans, f(r));
lo = l + 1;
} else {
ans = std::min(ans, f(l));
hi = r - 1;
}
}
ans = std::min(ans, f(hi));
}
std::cout << std::fixed << std::setprecision(9) << ans << "\n";
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3804kb
input:
6 5 1 1 2 3 2 2 4 4 5 4 6 1 5 3 6
output:
5.000000000
result:
ok found '5.000000000', expected '5.000000000', error '0.000000000'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3868kb
input:
1 0 100 1 1 1 1
output:
0.000000000
result:
ok found '0.000000000', expected '0.000000000', error '-0.000000000'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3940kb
input:
4 2 3 1 2 3 4 1 2 3 4
output:
0.833333333
result:
ok found '0.833333333', expected '0.833333333', error '0.000000000'
Test #4:
score: 0
Accepted
time: 0ms
memory: 3964kb
input:
6 5 1 1 2 3 2 2 4 4 5 4 6 1 5 6 3
output:
5.000000000
result:
ok found '5.000000000', expected '5.000000000', error '0.000000000'
Test #5:
score: 0
Accepted
time: 1235ms
memory: 101284kb
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.024989876
result:
ok found '0.024989876', expected '0.024989876', error '0.000000000'
Test #6:
score: 0
Accepted
time: 0ms
memory: 3752kb
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.000000013
result:
ok found '0.000000013', expected '0.000000013', error '0.000000000'
Test #7:
score: 0
Accepted
time: 0ms
memory: 3808kb
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.833333333
result:
ok found '3.833333333', expected '3.833333333', error '0.000000000'
Test #8:
score: 0
Accepted
time: 0ms
memory: 3844kb
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.700000000
result:
ok found '0.700000000', expected '0.700000000', error '0.000000000'
Test #9:
score: 0
Accepted
time: 1ms
memory: 3860kb
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.805982906
result:
ok found '1.805982906', expected '1.805982906', error '0.000000000'
Test #10:
score: 0
Accepted
time: 1ms
memory: 3872kb
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.272727273
result:
ok found '0.272727273', expected '0.272727273', error '0.000000000'
Test #11:
score: 0
Accepted
time: 957ms
memory: 101264kb
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.900000000
result:
ok found '365.900000000', expected '365.900000000', error '0.000000000'
Test #12:
score: 0
Accepted
time: 619ms
memory: 101244kb
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.626118926
result:
ok found '6.626118926', expected '6.626118926', error '0.000000000'
Test #13:
score: 0
Accepted
time: 604ms
memory: 101344kb
input:
5000 4999 603835068 223 714 1868 220 1010 1047 1227 21 745 933 1281 1894 891 1005 4601 158 880 44 894 310 1418 4453 819 2380 4555 2795 632 4515 321 2239 100 1280 258 1374 827 616 4922 3842 3482 4721 1764 2675 1133 225 3144 124 3169 683 920 2958 370 534 72 255 648 3923 3013 852 977 284 2880 3728 53 4...
output:
0.000001490
result:
ok found '0.000001490', expected '0.000001490', error '0.000000000'
Test #14:
score: 0
Accepted
time: 0ms
memory: 3812kb
input:
10 10 629318717 4 9 2 10 8 7 7 6 3 2 9 10 4 9 8 10 3 4 1 6 8 4 4 7
output:
0.000000044
result:
ok found '0.000000044', expected '0.000000044', error '0.000000000'
Test #15:
score: 0
Accepted
time: 0ms
memory: 3816kb
input:
10 20 857 1 9 5 8 3 9 8 9 4 2 9 5 2 3 7 6 5 10 4 1 9 3 7 4 1 3 5 6 3 1 7 9 6 3 8 6 5 4 8 7 2 2 1 6
output:
0.004656584
result:
ok found '0.004656584', expected '0.004656584', error '0.000000000'
Test #16:
score: 0
Accepted
time: 0ms
memory: 3912kb
input:
10 100 884099588 8 6 3 8 3 6 8 3 2 6 7 4 2 1 7 4 5 1 7 3 9 10 3 1 10 5 5 6 5 1 9 10 4 1 10 4 8 10 6 3 10 7 7 3 9 10 7 10 2 10 3 2 3 10 8 3 10 5 5 10 9 4 2 9 3 7 2 5 10 2 9 10 8 5 10 7 6 7 4 7 1 3 7 9 10 6 1 8 6 3 1 4 1 9 2 7 5 3 7 4 6 2 1 4 6 10 6 7 10 1 8 10 4 9 7 8 10 4 9 3 3 8 4 10 6 9 10 8 5 9 5...
output:
0.000000005
result:
ok found '0.000000005', expected '0.000000005', error '0.000000000'
Test #17:
score: -100
Wrong Answer
time: 1ms
memory: 3856kb
input:
100 100 730 42 80 21 28 34 48 2 21 38 48 23 61 66 5 5 86 69 6 69 82 9 63 69 50 63 54 62 8 21 42 16 97 41 86 24 51 44 95 11 97 10 32 89 8 40 19 26 12 23 46 28 89 82 43 72 96 24 25 41 53 56 53 80 70 42 44 27 32 60 50 61 100 73 36 90 53 97 59 5 79 56 78 78 95 39 80 74 20 63 46 45 7 80 91 37 5 21 49 65 ...
output:
0.002735978
result:
wrong answer 1st numbers differ - expected: '0.0340136', found: '0.0027360', error = '0.0312776'