QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#733107#5978. Runaway QuailXSC06223 ✓2762ms7356kbC++142.2kb2024-11-10 17:14:192024-11-10 17:14:22

Judging History

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

  • [2024-11-10 17:14:22]
  • 评测
  • 测评结果:23
  • 用时:2762ms
  • 内存:7356kb
  • [2024-11-10 17:14:19]
  • 提交

answer

#include <bits/stdc++.h>
const long double eps = 1e-12;
int main() {
#ifdef ONLINE_JUDGE
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr), std::cout.tie(nullptr);
#else
	std::freopen(".in", "r", stdin);
	std::freopen(".out", "w", stdout);
#endif
	int T;
	for (std::cin >> T; T--; ) {
		int v, n;
		std::cin >> v >> n;
		std::vector<std::pair<int, int> > a(n + 1);
		for (int i = 1; i <= n; ++i)
			std::cin >> a[i].first;
		for (int i = 1; i <= n; ++i)
			std::cin >> a[i].second;
		a.emplace_back(0, 0), ++n;
		std::sort(a.begin() + 1, a.end());
		int p = std::lower_bound(a.begin() + 1, a.end(), std::make_pair(0, 0)) - a.begin();
		std::sort(a.begin() + 1, a.begin() + p, [](std::pair<int, int> x, std::pair<int, int> y) { return x.second == y.second ? x.first < y.first : x.second > y.second; });
		std::sort(a.begin() + p + 1, a.end(), [](std::pair<int, int> x, std::pair<int, int> y) { return x.second == y.second ? x.first < y.first : x.second < y.second; });
		std::vector<std::vector<long double> > f(n + 1, std::vector<long double> (n + 1, 1e18));
		f[1][n] = 0.;
		auto at = [&](int i, long double t) {
			return std::fabs(a[i].first + t * a[i].second * (i < p ? -1 : 1));
		};
		auto calc = [&](int i, long double t) {
			return at(i, t) / (v - a[i].second);
		};
		// for (int i = 1; i <= n; ++i)
		// 	printf("%d: (%d, %d)\n", i, a[i].first, a[i].second);
		for (int i = 1; i <= p; ++i)
			for (int j = n; j >= p; --j) {
				if (i == p && j == p)
					break;
				long double d = 0.;
				// printf("[%d, %d]: %lf\n", i, j, f[i][j]);
				for (int k = i; k < p; ++k) {
					if (at(k, f[i][j]) >= at(i, f[i][j]) - eps)
						d = std::max(d, calc(k, f[i][j]));
					// printf("  k1 = %d, d = %lf\n", k, d);
					f[k + 1][j] = std::min(f[k + 1][j], f[i][j] + d + (k != j - 1) * d);
				}
				d = 0.;
				for (int k = j; k > p; --k) {
					if (at(k, f[i][j]) >= at(j, f[i][j]) - eps)
						d = std::max(d, calc(k, f[i][j]));
					// printf("  k2 = %d, d = %lf\n", k, d);
					f[i][k - 1] = std::min(f[i][k - 1], f[i][j] + d + (k != i + 1) * d);
				}
			}
		{
			static int casetot = 0;
			std::cout << "Case #" << ++casetot << ": ";
		}
		std::cout << std::fixed << std::setprecision(9) << f[p][p] << '\n';
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 8
Accepted

Test #1:

score: 8
Accepted
time: 1ms
memory: 3804kb

input:

50
4 3
-3 -6 -9
3 2 1
2 2
1 -1
1 1
1000 25
769234 -5735820 -524288 -5403090 -6429140 1574982 1 -9733628 -1407481 4093041 4117720 -3193501 -9765195 -3069520 1122216 -5799108 131072 -8482066 -256 -8021159 -8958386 -7027036 5370579 -3602534 -6834567
425 102 744 155 339 19 999 19 159 198 51 304 369 601 ...

output:

Case #1: 3.000000000
Case #2: 5.000000000
Case #3: 51133.937500000
Case #4: 429262.396142110
Case #5: 129368.012279597
Case #6: 7801.832031250
Case #7: 66656.812500000
Case #8: 607220.690423515
Case #9: 5725896.876344086
Case #10: 129205.285220126
Case #11: 64298.000000000
Case #12: 610881.705159705...

result:

ok correct! (50 test cases)

Subtask #2:

score: 15
Accepted

Test #2:

score: 15
Accepted
time: 2762ms
memory: 7356kb

input:

50
4 3
-3 -6 -9
3 2 1
2 2
1 -1
1 1
1000 500
-9650379 9806301 -6495789 -1283284 5022779 4725553 9364178 -8123302 -9609729 7847458 -142364 6983908 8147008 -3186924 7339254 -8737645 8757174 7887319 3609962 5780915 -1752801 -1657946 -9511339 5113995 -7887160 -6093170 260267 -3837106 -356098 6676924 6210...

output:

Case #1: 3.000000000
Case #2: 5.000000000
Case #3: 205911250.088888889
Case #4: 36298.000000000
Case #5: 186002.250000000
Case #6: 13741948.500000000
Case #7: 109001.125000000
Case #8: 38656.812500000
Case #9: 128881.056148055
Case #10: 8069407.987096774
Case #11: 128881.056148055
Case #12: 124955.3...

result:

ok correct! (50 test cases)

Extra Test:

score: 0
Extra Test Passed