QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#164662#7110. Kuririn MIRACLETsReaperAC ✓127ms4236kbC++171.5kb2023-09-05 12:07:062023-09-05 12:07:06

Judging History

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

  • [2023-09-05 12:07:06]
  • 评测
  • 测评结果:AC
  • 用时:127ms
  • 内存:4236kb
  • [2023-09-05 12:07:06]
  • 提交

answer

#include <bits/stdc++.h>
#define EPS 1e-9
using namespace std;

double v, r, d;

int sgn(double x) {
    if (x > EPS) return 1;
    if (x < -EPS) return -1;
    return 0;
}

double f(double x) {
    double s = sin(x);
    return 1 / (sqrt(s * s + 3) - s);
}

double simpson(double l, double r) {
    double mid = (l + r) / 2;
    return (r - l) * (f(l) + 4 * f(mid) + f(r)) / 6;
}

double calc(double l, double r, double eps, double ans) {
    double mid = (l + r) / 2;
    double fl = simpson(l, mid), fr = simpson(mid, r);
    if (abs(fl + fr - ans) <= 15 * eps) return fl + fr + (fl + fr - ans) / 15;
    return calc(l, mid, eps / 2, fl) + calc(mid, r, eps / 2, fr);
}

void solve() {
    scanf("%lf%lf%lf", &v, &r, &d);

    double ans = d / v;
    const double PI = acos(-1);
    double head = PI / 2, tail = PI;
    while (tail - head > EPS) {
        double mid = (head + tail) / 2;
        double t = 2 * r / v * calc(0, mid, EPS, simpson(0, mid));
        double x = 2 * r * (1 - cos(mid)) + v * t;
        double y = 2 * r * sin(mid);
        double beta = atan2(y, d - x);
        double dot = (x - (2 * r + v * t)) * (2 * v * cos(beta) - v) - y * (2 * v * sin(beta));
        if (sgn(dot) >= 0) {
            tail = mid;
            ans = min(ans, t + sqrt((x - d) * (x - d) + y * y) / (2 * v));
        } else {
            head = mid;
        }
    }
    printf("%.9f\n", ans);
}

int main() {
    int tcase; scanf("%d", &tcase);
    while(tcase--) solve();
    return 0;
}

这程序好像有点Bug,我给组数据试试?

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 4000kb

input:

1
2.00 3 30.0

output:

8.310579934

result:

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

Test #2:

score: 0
Accepted
time: 16ms
memory: 4236kb

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.457837123
5.488360809
5.848699764
1.123680241
43.266480054
8.305490138
2.377358491
4.015485970
37.948148148
18.652061856
4.155123644
27.178963007
9.625454545
63.311926606
16.613861386
15.093994461
1.017182131
6.949623503
8.150430299
8.858447489
1.769764216
4.541139241
10.473186120
5.620603015
4.33...

result:

ok 100 numbers

Test #3:

score: 0
Accepted
time: 127ms
memory: 4128kb

input:

1000
7.52 6.68 80.67
5.34 6.82 45.75
3.57 6.35 22.35
9.55 3.65 31.38
9.37 5.73 40.42
1.83 8.38 82.97
4.86 6.13 9.45
3.88 5.34 84.19
6.49 4.15 85.24
6.51 7.23 42.97
3.0 5.98 57.53
9.35 2.76 69.07
6.76 9.16 91.24
2.98 9.89 49.2
9.16 3.85 66.14
1.84 3.03 37.43
8.01 5.04 50.98
4.05 9.86 4.76
5.4 5.49 60...

output:

5.770882649
8.567415730
6.260504202
3.285863874
4.313767343
25.176484172
1.944444444
11.406299616
6.807191206
6.600614439
10.727712561
3.800197845
7.484484303
16.510067114
3.775697012
10.915711070
3.517527646
1.175308642
6.095287439
14.443181818
8.416824074
8.489455308
6.028112275
14.641104294
0.981...

result:

ok 1000 numbers

Extra Test:

score: 0
Extra Test Passed