QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#301303#5054. City Brainzzuqy#WA 403ms102224kbC++143.2kb2024-01-09 17:32:102024-01-09 17:32:11

Judging History

你现在查看的是最新测评结果

  • [2024-01-09 17:32:11]
  • 评测
  • 测评结果:WA
  • 用时:403ms
  • 内存:102224kb
  • [2024-01-09 17:32:10]
  • 提交

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
*/

详细

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'