QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#301290 | #5054. City Brain | zzuqy# | WA | 249ms | 102188kb | C++14 | 3.1kb | 2024-01-09 17:20:01 | 2024-01-09 17:20:03 |
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 - n, 1); ta <= min((kt - b) / a, ttmp + n); ta++) {
int tb = (kt - ta * a) / b;
//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)
assert(0);
tmp -= (kt - a * ta - b * tb) * 1.0 / ta / (ta + 1);
} else {
if (kt - a * ta - b * tb >= b)
assert(0);
tmp -= (kt - a * ta - b * tb) * 2.0 / tb / (tb + 1);
//flag |= 2;
}
if (tmp < ans)
ans = tmp;
}
} else {
int ttmp = (int)(kt / (a + s2 * b) * s2);
for (int tb = max(ttmp - n, 1); tb <= min((kt - a) / b, ttmp + n); tb++) {
int ta = (kt - tb * b) / a;
//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)
assert(0);
tmp -= (kt - a * ta - b * tb) * 1.0 / ta / (ta + 1);
} else {
if (kt - a * ta - b * tb >= b)
assert(0);
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: 4ms
memory: 101988kb
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: 4ms
memory: 102136kb
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: 7ms
memory: 101920kb
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: 0ms
memory: 102068kb
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: 249ms
memory: 102188kb
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: 101936kb
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: 101988kb
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: 4ms
memory: 101968kb
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: -100
Wrong Answer
time: 17ms
memory: 101996kb
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.815151515151515
result:
wrong answer 1st numbers differ - expected: '1.8059829', found: '1.8151515', error = '0.0050768'