QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#880737 | #3854. Radar | ychangseok | WA | 1ms | 4352kb | C++14 | 3.0kb | 2025-02-03 19:13:22 | 2025-02-03 19:13:22 |
Judging History
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'