QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#714145#9576. Ordainer of Inexorable Judgmentucup-team1196#WA 1ms4224kbC++233.0kb2024-11-05 21:52:542024-11-05 21:52:56

Judging History

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

  • [2024-12-23 14:23:26]
  • hack成功,自动添加数据
  • (/hack/1303)
  • [2024-12-06 11:32:56]
  • hack成功,自动添加数据
  • (/hack/1271)
  • [2024-11-14 21:58:28]
  • hack成功,自动添加数据
  • (/hack/1181)
  • [2024-11-05 21:52:56]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:4224kb
  • [2024-11-05 21:52:54]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define double long double

const double PI = acos(-1);
struct Point {
    int x, y;
    Point(int x_ = 0, int y_ = 0) : x(x_), y(y_) {}

    friend std::istream& operator >> (std::istream& is, Point& a) {
        return is >> a.x >> a.y;
    }
};

void solve() {
    int n, d, t;
    Point o(0, 0), f;
    std::cin >> n >> f >> d >> t;
    std::vector<Point> ps(n + 1);
    for (int i = 1; i <= n; i++) {
        std::cin >> ps[i];
    }

    std::cout << std::fixed << std::setprecision(12);

    auto [X, Y] = f;
    double init = std::acos(X / std::sqrt(X * X + Y * Y));
    if (Y < 0) {
        init = 2 * PI - init;
    }

    auto change = [&](double x) {
        if (x < 0) {
            return 2 * PI + x;
        } else {
            return x;
        }
    };

    std::vector<std::pair<double, double>> v;

    auto cal = [&](int x, int y) {
        double D = std::sqrt(x * x + y * y);
        double EQ = 1. * d / D;
        double Cos = y / D;
        double alpha = std::acos(Cos);
        if (x < 0) {
            alpha = 2 * PI - alpha;
        }
        double ang = asin(EQ);
        double L = ang - alpha;
        double R = PI - alpha - ang;
        L = change(L);
        R = change(R);
        L -= init;
        R -= init;
        while (L < 0) {
            L += 2 * PI;
        }
        while (R < 0) {
            R += 2 * PI;
        }
        while (L > 2 * PI) {
            L -= 2 * PI;
        }
        while (R > 2 * PI) {
            R -= 2 * PI;
        }
        if (R < L) {
            std::swap(L, R);
        }
        if (R - L >= PI) {
            v.push_back({R - 2 * PI, L});
        } else {
            v.push_back({L, R});
        }
    };

    for (int i = 1; i <= n; i++) {
        auto [x, y] = ps[i];
        if (x * x + y * y <= d * d) {
            std::cout << 1. * t << '\n';
            return;
        }
        cal(x, y);
    }

    std::sort(v.begin(), v.end());

    double lst = 0;

    int whole = t / (2 * PI);
    double rem = t - whole * 2 * PI;

    double T = 2 * PI;

    const double EPS = 1e-8;

    double ma = -1e18, mi = 1e18;
    for (auto [L, R] : v) {
        // std::cout << L << ' ' << R << '\n';
        ma = std::max(ma, L);
        mi = std::min(mi, R);
    }

    // std::cout << "Before " << mi << ' ' << ma << '\n';

    mi -= PI / 2;
    ma += PI / 2;

    if (ma < mi) {
        std::swap(mi, ma);
    }

    // std::cout << mi << ' ' << ma << '\n';
    T = ma - mi;

    double pre = std::max((double)0.,std::min(ma, rem) - std::max((double)0., mi));
    double bac = std::max((double)0., rem - mi - 2 * PI);
    double Rem = pre + bac;

    std::cout << whole * T + Rem << '\n';
}


signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    // freopen("M.in", "r", stdin);

    int t = 1;
    // std::cin >> t;

    while (t --) {
        solve();
    }
}

详细

Test #1:

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

input:

3 1 0 1 1
1 2
2 1
2 2

output:

1.000000000000

result:

ok found '1.0000000', expected '1.0000000', error '0.0000000'

Test #2:

score: 0
Accepted
time: 1ms
memory: 3928kb

input:

3 1 0 1 2
1 2
2 1
2 2

output:

1.570796326795

result:

ok found '1.5707963', expected '1.5707963', error '0.0000000'

Test #3:

score: 0
Accepted
time: 0ms
memory: 4012kb

input:

3 1 0 1 10000
1 2
2 1
2 2

output:

2500.707752257475

result:

ok found '2500.7077523', expected '2500.7077523', error '0.0000000'

Test #4:

score: 0
Accepted
time: 0ms
memory: 4176kb

input:

3 10000 10000 1 10000
10000 9999
10000 10000
9999 10000

output:

0.384241300290

result:

ok found '0.3842413', expected '0.3842413', error '0.0000000'

Test #5:

score: 0
Accepted
time: 0ms
memory: 4136kb

input:

3 -10000 -10000 10000 10000
-10000 -9999
-10000 -10000
-9999 -10000

output:

2500.240670009608

result:

ok found '2500.2406700', expected '2500.2406700', error '0.0000000'

Test #6:

score: 0
Accepted
time: 0ms
memory: 4044kb

input:

4 1 0 1 10000
-2 3400
-4 10000
-4 -10000
-2 -3400

output:

4999.219115408456

result:

ok found '4999.2191154', expected '4999.2191154', error '0.0000000'

Test #7:

score: 0
Accepted
time: 0ms
memory: 3912kb

input:

4 1 0 1 10000
-2 3300
-4 10000
-4 -10000
-2 -3300

output:

4999.200391854117

result:

ok found '4999.2003919', expected '4999.2003919', error '0.0000000'

Test #8:

score: 0
Accepted
time: 0ms
memory: 4164kb

input:

4 -3040 2716 2147 2
-9033 -8520
-8999 -8533
-8988 -8511
-9004 -8495

output:

0.350830058342

result:

ok found '0.3508301', expected '0.3508301', error '0.0000000'

Test #9:

score: 0
Accepted
time: 1ms
memory: 4084kb

input:

3 8168 -766 1549 1256
-3951 -6425
-3874 -6439
-3911 -6389

output:

84.832861161007

result:

ok found '84.8328612', expected '84.8328612', error '0.0000000'

Test #10:

score: 0
Accepted
time: 0ms
memory: 4040kb

input:

8 2977 -3175 8766 2
-4868 7759
-4867 7925
-4867 7950
-4886 7952
-4979 7953
-5048 7877
-5003 7761
-4936 7759

output:

0.327860646906

result:

ok found '0.3278606', expected '0.3278606', error '0.0000000'

Test #11:

score: 0
Accepted
time: 1ms
memory: 4088kb

input:

13 -1715 -4640 267 8651
272 6659
264 6660
208 6664
108 6625
107 6621
93 6564
90 6551
90 6485
124 6474
219 6477
283 6525
288 6591
286 6657

output:

153.589622784675

result:

ok found '153.5896228', expected '153.5896228', error '0.0000000'

Test #12:

score: 0
Accepted
time: 0ms
memory: 4224kb

input:

8 -9743 -7629 775 7
-194 981
-191 1720
-193 1845
-705 1929
-959 1950
-1131 1894
-1151 1604
-1031 1020

output:

2.046006204356

result:

ok found '2.0460062', expected '2.0460062', error '0.0000000'

Test #13:

score: -100
Wrong Answer
time: 0ms
memory: 4144kb

input:

9 -6770 -1426 3491 1918
-2118 2886
-2063 3245
-2122 3709
-2129 3737
-2850 3718
-2984 3650
-3042 3462
-3028 2972
-2688 2888

output:

822.038867773234

result:

wrong answer 1st numbers differ - expected: '822.2411850', found: '822.0388678', error = '0.0002461'