QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#162920#7110. Kuririn MIRACLEucup-team1209#WA 78ms35316kbC++201.7kb2023-09-03 17:46:052023-09-03 17:46:06

Judging History

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

  • [2023-09-03 17:46:06]
  • 评测
  • 测评结果:WA
  • 用时:78ms
  • 内存:35316kb
  • [2023-09-03 17:46:05]
  • 提交

answer

#include<bits/stdc++.h>
using std::cin;
using std::cout;
using db = long double;
using cp = std::complex<db>;
db f(db t) {
	db s = std::sin(t);
	return std::sqrt(3 + s * s);
}
const int N = 1e6;
const db pi = std::acos(-1);
db beg[N + 1];
db sum[N + 1];
db guess(db l, db r) {
	return (f(l) + f(r) + f((l + r) / 2) * 4) / 6 * (r - l);
}
void init() {
	for(int i = 0;i <= N;++i) {
		beg[i] = pi / N * i;
	}
	for(int i = 0;i < N;++i) {
		sum[i + 1] = sum[i] + guess(beg[i], beg[i + 1]);
	}
}
db calc(db t) {
	int p = std::upper_bound(beg, beg + N, t) - beg - 1;
	db su = sum[p] + guess(beg[p], t);
	su += (1 - std::cos(t));
	return su / 3 * 2;
}

int main() {
	std::ios::sync_with_stdio(false), cin.tie(0);
	#ifdef zqj
	freopen("$.in", "r", stdin);
	#endif
	init();
	int T;
	cin >> T;
	for(int i = 0;i < T;++i) {
		db v, R, d, V;
		cin >> v >> R >> d;
		d /= R;
		v /= R;
		R /= R;
		V = v;
		auto gett = [&](db ang) { return calc(ang) / v; };
		db l = pi / 2 + 1e-8, r = pi - 1e-8;
		// cout << gett(pi) << '\n';
		// cout << gett(pi) * v + 3 * R << '\n';
		if(gett(r) * v + 3 * R <= d) {
			db ans = (d - R) / v;
			for(int i = 0;i < 100;++i) {
				db mid = (l + r) / 2;
				db T = gett(mid);
				cp o0 = cp(2, 0) + cp(v, 0) * T;
				cp o1 = o0 + db(2) * cp(std::cos(pi - mid), std::sin(pi - mid));
				cp v = cp(std::sin(mid), std::cos(mid)) * (f(mid) - std::sin(mid)) + cp(R, 0);
				// cout << abs(v) << '\n';
				db tm = o1.imag() / -v.imag();

				if((o1 + v * tm).real() <= d) {
					r = mid;
					ans = std::min(ans, T + abs(o1 - cp(d, 0)) / V / 2);
				} else {
					l = mid;
				}
			}
			printf("%.20Lf\n", ans);
		} else {
			printf("%.20Lf\n", (d - R) / v);
		}
	}
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 78ms
memory: 35316kb

input:

1
2.00 3 30.0

output:

8.31057993390645308781

result:

ok found '8.3105799', expected '8.3105799', error '0.0000000'

Test #2:

score: -100
Wrong Answer
time: 77ms
memory: 35140kb

input:

100
8.66 6.05 71.59
8.44 8.67 82.55
4.23 9.68 24.74
6.63 9.95 7.45
1.2 7.27 97.55
2.08 2.94 31.61
8.48 5.56 20.16
7.35 5.55 52.48
1.35 8.15 51.23
3.88 9.02 72.37
7.03 1.97 57.03
1.78 4.44 93.44
5.5 6.11 52.94
1.09 9.64 69.01
1.01 3.54 16.78
1.63 4.55 44.06
5.82 5.51 5.92
5.62 2.93 76.01
4.75 4.43 73...

output:

4.45783712273709837237
5.48836080899674417849
3.56028368794326241097
-0.37707390648567119159
43.26648005353473130929
8.30549013820445342082
1.72169811320754716992
4.01548596951186993927
31.91111111111111111119
16.32731958762886597877
4.15512364357619008422
27.17896300708069039914
8.51454545454545454...

result:

wrong answer 3rd numbers differ - expected: '5.8486998', found: '3.5602837', error = '0.3912692'