QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#587147 | #5054. City Brain | hcywoi | WA | 1579ms | 101328kb | C++23 | 3.3kb | 2024-09-24 17:47:20 | 2024-09-24 17:47:21 |
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;
}
for (int s = 0; s < n; s ++ ) {
for (int t = s + 1; 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]);
if (both > n || dis1 + dis2 > n) {
continue;
}
auto f = [&](int x) -> long double {
if (1LL * x * both > k) {
return 1E9;
}
int nk = k;
long double res = 2. / (x + 1) * both;
nk -= x * both;
if (dis1 + dis2 > 0) {
int t = nk / (dis1 + dis2);
res += 1. / (t + 1) * (dis1 + dis2);
nk -= t * (dis1 + dis2);
if (nk > 0) {
if (std::min(both - 1, nk) * 2. / (x + 1) / (x + 2) > nk * 1. / (t + 1) / (t + 2)) {
res -= std::min(both - 1, nk) * 2. / (x + 1) / (x + 2);
} else {
res -= nk * 1. / (t + 1) / (t + 2);
}
}
} else {
res -= std::min(both - 1, nk) * 2. / (x + 1) / (x + 2);
}
return res;
};
if (k == 149) {
for (int i = 0; i <= k; i ++ ) {
ans = std::min(ans, f(i));
}
}
int lo = 0, hi = k;
while (lo < hi) {
int m = (lo + hi) / 2;
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: 4028kb
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: 3808kb
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: 3808kb
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: 4040kb
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: 1099ms
memory: 101264kb
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: 3808kb
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: 3700kb
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: 3900kb
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: 3ms
memory: 3852kb
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: 3796kb
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: 875ms
memory: 101276kb
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: -100
Wrong Answer
time: 1579ms
memory: 101328kb
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.629765795
result:
wrong answer 1st numbers differ - expected: '6.6261189', found: '6.6297658', error = '0.0005504'