QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#880737#3854. RadarychangseokWA 1ms4352kbC++143.0kb2025-02-03 19:13:222025-02-03 19:13:22

Judging History

This is the latest submission verdict.

  • [2025-02-03 19:13:22]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 4352kb
  • [2025-02-03 19:13:22]
  • Submitted

answer

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;
typedef long long ll;
typedef double lb;
#define all(v) v.begin(), v.end()
#define M_PI 3.14159265358979323846


lb getdist(ll x, ll y, ll r, lb a){
    // cout << x << ' ' << y << ' ' << r * cos(a.deg) << ' ' << r * sin(a.deg) << '\n';

    lb dx = x - r * cos(a);
    lb dy = y - r * sin(a);

    return dx*dx + dy*dy;
}

ll n, m, q;
ll x, y, r;

vector<ll> vr;
vector<lb> angle;

int main(){
    cin.tie(0)->sync_with_stdio(0);
    cout << fixed;
    cout.precision(20);

    cin >> n >> m >> q;
    
    for (int i = 1; i <= n; i++){
        cin >> r;
        vr.push_back(r);
    }
    for (int i = 1; i <= m; i++){
        cin >> x >> y;
        angle.push_back(atan2(y,x));
    }

    sort(all(vr));
    sort(all(angle));

    vector<lb> tmp;
    for (int i = 0; i < m; i++){
        tmp.push_back(angle[i] - 2*M_PI);
    }
    for (int i = 0; i < m; i++){
        tmp.push_back(angle[i]);
    }
    for (int i = 0; i < m; i++){
        tmp.push_back(angle[i] + 2*M_PI);
    }

    // for (int i = 0; i < n; i++){
    //     cout << vr[i] << ' ';
    // }
    // cout << endl;
    // for (int i = 0; i < m; i++){
    //     cout << angle[i] * 180 / M_PI << endl;

    //     // if (i % m == m-1) cout << endl;
    // }
    // cout << endl;
    // for (int i = 0; i < 3*m; i++){
    //     cout << tmp[i] * 180 / M_PI << endl;

    //     if (i % m == m-1) cout << endl;
    // }
    // cout << endl;
    // cout << endl;

    while (q--){
        cin >> x >> y;

        int left = 0;
        int right = n - 1;

        while (left < right){
            int mid = (left + right + 1) / 2;

            if (x*x+y*y >= vr[mid]){
                left = mid;
            }else{
                right = mid - 1;
            }
        }

        // cout << x << ' ' << y << ' ' << vr[left] << '\n';

        int lr = left;
        lb theta = atan2(y, x);

        int lt = 0;

        left = 0;
        right = 3*m - 1;

        while (left < right){
            int mid = (left + right + 1) / 2;

            if (tmp[mid] > theta) right = mid - 1;
            else left = mid;
        }

        // cout << angle[left].deg << ' ' << theta << ' ' << angle[right].deg << endl;

        lt = left;
        
        // cout << lt << ' ' << rt << endl;

        lb dist = 9e18;

        for (int ridx = lr-1; ridx <= lr+1; ridx++){
            for (int tidx = lt-1; tidx <= lt+1; tidx++){
                if (ridx < 0) continue;
                if (ridx >= n) continue;
                if (tidx < 0) continue;

                lb d = getdist(x, y, vr[ridx], angle[(tidx)%m]);
                // cout << vr[ridx] << ' ' << angle[tidx].x << ' ' << angle[tidx].y << ' ' << d << endl;

                dist = min(dist, d);
            }
        }

        cout << sqrt(dist) << '\n';
        // cout << endl;
    }

}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 4352kb

input:

3 8 4
2
4
7
1 0
2 1
0 1
-1 1
-5 -2
-5 -6
-2 -7
6 -1
-1 -1
3 1
-5 -3
8 1

output:

0.60529107291663986068
0.97777229046560487635
1.55184510540178943749
1.41421356237309514547

result:

ok 4 numbers

Test #2:

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

input:

1 8 32
7
0 1
1 0
0 -1
-1 0
1 -1
-1 1
-1 -1
1 1
20 10
10 20
-20 10
10 -20
-10 20
20 -10
-10 -20
-20 -10
2 1
1 2
-2 1
1 -2
-1 2
2 -1
-1 -2
-2 -1
5 0
0 5
-5 0
0 -5
5 5
5 -5
-5 5
-5 -5
9 0
0 9
-9 0
0 -9
9 9
9 -9
-9 9
-9 -9

output:

15.87498509925757517181
15.87498509925757517181
15.87498509925757517181
15.87498509925757517181
15.87498509925757517181
15.87498509925757517181
15.87498509925757517181
15.87498509925757517181
4.92965670104572240007
4.92965670104572240007
4.92965670104572240007
4.92965670104572240007
4.92965670104572...

result:

ok 32 numbers

Test #3:

score: -100
Wrong Answer
time: 1ms
memory: 4096kb

input:

3 4 1681
16
8
4
-1 0
0 -1
0 1
1 0
-9 17
-4 -7
2 -13
-11 -17
15 -19
-7 1
-8 14
-8 -7
-8 20
-16 -3
12 14
-3 12
9 -5
-18 11
3 -1
2 0
-18 0
0 -19
-1 -19
18 -8
2 20
5 -8
-8 -19
-9 -16
20 -19
14 -1
3 10
-1 -4
4 10
16 17
19 -7
-17 4
1 -12
-5 -12
-5 -10
-15 -5
-10 -19
-2 -10
-4 -16
-2 4
-14 8
-17 16
4 1
16 ...

output:

9.05538513813741907654
4.12310562561766147383
3.60555127546398868077
11.04536101718726293086
15.29705854077835347482
1.41421356237309425730
8.24621125123532294765
7.00000000000000088818
8.94427190999916099656
3.00000000000000177636
12.16552506059643867786
5.00000000000000000000
5.0990195135927844916...

result:

wrong answer 28th numbers differ - expected: '1.0000000', found: '4.1231056', error = '3.1231056'