QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#847583 | #9869. Horizon Scanning | enze114514 | WA | 46ms | 3908kb | C++20 | 6.0kb | 2025-01-08 07:02:20 | 2025-01-08 07:02:28 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
#define pb push_back
const ld pi = 3.14159265358979323846;
const int mod = (int)1e9 + 7;
const ll INF = 1e18;
template<typename T>
T chmax(T a, T b){
return a > b ? a : b;
}
template<typename T>
T chmin(T a, T b){
return a > b ? b : a;
}
const int N = (int)2e5 + 1, M = N * 2;
template<typename T>
struct Point{
T x, y;
ld eps;
Point() : x(0), y(0), eps(1e-9) {}
Point(T x, T y) : x(x), y(y), eps(1e-9) {}
void set_eps(T eps){
this->eps = eps;
}
Point operator+ (const Point& b){
return Point(x + b.x, y + b.y);
}
Point operator- (const Point& b){
return Point(x - b.x, y - b.y);
}
Point operator- (){
return Point(-x, -y);
}
Point operator* (T t) const{
return Point(x * t, y * t);
}
Point operator/ (T t) const{
return Point(x / t, y / t);
}
Point &operator+=(Point p) &{
x += p.x;
y += p.y;
return *this;
}
Point &operator-=(Point p) &{
x -= p.x;
y -= p.y;
return *this;
}
Point &operator*=(T v) &{
x *= v;
y *= v;
return *this;
}
Point &operator/=(T v) &{
x /= v;
y /= v;
return *this;
}
Point &operator=(const Point& b) &{
x = b.x;
y = b.y;
return *this;
}
friend Point operator+ (const Point& a, const Point& b){
return {a.x + b.x, a.y + b.y};
}
friend Point operator- (const Point& a, const Point& b){
return {a.x - b.x, a.y - b.y};
}
friend bool operator==(Point a, Point b){
return a.x == b.x && a.y == b.y;
}
int sign(T x){
if(fabs(x) < eps){
return 0;
}
if(x < 0){
return -1;
}
return 1;
}
bool cmp(T x, T y){
if(fabs(x - y) > eps){
return 0;
}
return 1;
}
bool cmp(const Point& a, const Point& b){
return cmp(a.x, b.x) && cmp(a.y, b.y);
}
T dot(const Point& a, const Point& b){
return a.x * b.x + a.y * b.y;
}
T square(Point a){
return dot(a, a);
}
T cross(const Point& a, const Point& b){
return a.x * b.y - a.y * b.x;
}
T cross(const Point& a, const Point& b, const Point& p){
return (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x);
}
T get_len(const Point& a){
return sqrt(dot(a, a));
}
T get_angle(const Point& a, const Point& b){
return acos(dot(a, b) / get_len(a) / get_len(b));
}
T area(const Point& a, const Point& b, const Point& c){
return cross(b - a, c - a);
}
Point rotate(const Point& a, T angle){ //两个点就 b - a (b按a转)
T dx = a.x * cos(angle) + a.y * sin(angle);
T dy = -a.x * sin(angle) + a.y * cos(angle);
return Point(dx, dy);
}
Point intersect(const Point& p, const Point& v, const Point& q, const Point& w){
Point u = p - q;
T t = cross(w, u) / cross(v, w);
return p + v * t;
}
T point_dist(const Point& a, const Point& b){
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
T line_dist(const Point& a, const Point& b, const Point& p){
Point u = b - a, v = p - a;
return fabs(cross(u, v)) / get_len(u);
}
T get_slope(const Point& a, const Point& b){
if(b.y == a.y) return INF;
if(b.x == a.x) return 0;
return (b.y - a.y) / (b.x - a.x);
}
T circle_intersect(const Point& p1, const Point& p2, const T r1, const T r2){
ld d = sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
if(d > r1 + r2 || d + chmin(r1, r2) <= chmax(r1, r2)){
return 0;
}
else if(d == r1 + r2){
return 1;
}
else{
return 2;
}
}
T seg_dist(const Point& a, const Point& b, const Point& p){
if(a == b){
return get_len(p - a);
}
Point u = b - a, v = p - a, w = p - b;
if(sign(dot(u, v)) < 0){
return get_len(v);
}
if(sign(dot(u, w)) > 0){
return get_len(w);
}
return line_dist(a, b, p);
}
Point projection(const Point& a, const Point& b, const Point& p){
Point v = b - a;
return a + v * dot(v, p - a) / get_len(v);
}
bool on_segment(const Point& a, const Point& b, const Point& p){
bool u = sign(cross(p - a, p - b)) == 0;
bool v = sign(dot(p - a, p - b)) <= 0;
return u && v;
}
bool seg_intersection(const Point& a1, const Point& a2, const Point& b1, const Point& b2){
T c1 = cross(a2 - a1, b1 - a1), c2 = cross(a2 - a1, b2 - a1);
T c3 = cross(b2 - b1, a2 - b1), c4 = cross(b2 - b1, a1 - b1);
return sign(c1) * sign(c2) <= 0 && sign(c3) * sign(c4) <= 0;
}
friend std::ostream &operator<<(ostream &os, Point p) {
return os << "(" << p.x << ", " << p.y << ")";
}
};
void solve(){
int n, k;
cin >> n >> k;
vector<ld> a;
for(int i = 0; i < n; i++){
ld x, y;
cin >> x >> y;
a.pb(atan2(y, x));
}
sort(a.begin(), a.end());
cout << setprecision(20);
if(n == 1){
cout << 2 * pi << endl;
return;
}
ld qwq = 0;
for(int i = k; i < 2 * n; i++){
if(i >= n){
a[i % n] += 2 * pi;
}
qwq = chmax(qwq, fabs(a[i % n] - a[(i - k + n) % n]));
}
cout << qwq << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
cin >> t;
while(t--){
solve();
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3908kb
input:
5 1 1 0 1 8 2 1 0 1 1 0 1 -1 1 -1 0 -1 -1 0 -1 1 -1 4 2 -1 1 0 1 0 2 1 1 4 2 -1000000000 0 -998244353 1 998244353 1 1000000000 0 3 1 0 1 0 2 0 -1
output:
6.283185307179586232 1.5707963267948966196 5.4977871437821379226 3.1415926545915517283 3.1415926535897932385
result:
ok 5 numbers
Test #2:
score: -100
Wrong Answer
time: 46ms
memory: 3844kb
input:
10000 16 1 -10 -6 -5 -6 -4 9 -2 5 -2 10 1 -7 1 -5 1 6 3 1 4 -9 6 -10 6 -3 6 1 8 -5 8 -4 9 -4 17 4 -9 2 -8 -4 -8 -3 -8 -1 -6 -2 -6 -1 -6 8 -5 -8 -5 10 -4 8 -2 -8 4 -9 4 0 5 -3 8 -5 9 -2 10 10 10 6 -7 2 -4 6 -2 -7 -2 -1 -1 7 1 -9 1 8 3 -4 7 -4 9 -2 14 3 -9 10 -8 -10 -8 -8 -6 -7 -6 -5 -1 -7 -1 -2 0 -1 ...
output:
1.6929914974862514286 2.5748634360662868911 4.6527582672535202236 2.7726331073839365288 5.7427658069090020765 4.8576989910203917395 3.4198923125949043452 2.8127999620848386142 0 0 5.1172807666697730363 6.1467827027786388037 3.8420890235375193523 2.3424967168194791405 3.463343207986435187 0 5.9614347...
result:
wrong answer 9th numbers differ - expected: '6.2831853', found: '0.0000000', error = '1.0000000'