QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#714145 | #9576. Ordainer of Inexorable Judgment | ucup-team1196# | WA | 1ms | 4224kb | C++23 | 3.0kb | 2024-11-05 21:52:54 | 2024-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: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();
}
}
Details
Tip: Click on the bar to expand more detailed information
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'