QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#137623 | #2350. Integer Cow | dzy521 | WA | 37ms | 3852kb | C++23 | 6.9kb | 2023-08-10 14:49:49 | 2023-08-10 14:49:50 |
Judging History
answer
#define _CRT_SEstartE_NO_DEPRECATE
#pragma warning(disable : 4996)
#include <map>
#include <unordered_map>
#include <set>
#include <fstream>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <bitset>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdio>
#include <bits/stdc++.h>
#define ACcode ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
const ll maxn = 1e6 + 7;
const ll maxm = 7e6 + 7;
constexpr ll mod = 998244353;
const ll inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int Prime = 100007;
const double eps = 1e-10;
const double pi = acos(-1.0);
using namespace std;
using point_t = long double;
template <typename T>
struct point
{
T x, y;
point() {}
point(T _x, T _y) { x = _x, y = _y; }
point operator+(const point &b) const { return {x + b.x, y + b.y}; }
point operator-(const point &b) const { return {x - b.x, y - b.y}; }
point operator/(const T &k) const { return {x / k, y / k}; }
point operator*(const T &k) const { return {x * k, y * k}; }
T operator*(const point &b) const { return (x * b.x + y * b.y); }
T operator^(const point &b) const { return x * b.y - y * b.x; }
// 浮点数运算
T len2() const { return (*this) * (*this); }
T dis2(const point &a) const { return (a - (*this)).len2(); }
long double len() const { return sqrtl(len2()); }
long double dis(const point &a) const { return sqrtl(dis2(a)); }
};
using Point = point<point_t>;
template <typename T>
struct line
{
point<T> p, v; // 直线上一点和方向向量
line() {}
line(T k, T b) { p = {0, b}, v = {1, k}; }
line(point<T> _p, point<T> _v) { p = _p, v = _v; }
point<T> proj(const point<T> &a) const // 点在直线上的投影
{
return p + v * ((v * (a - p)) / (v * v));
}
long double dis(const point<T> &a) const // 点到直线距离
{
return abs(v ^ (a - p)) / v.len();
}
};
using Line = line<point_t>;
struct Circle
{
Point c;
long double r;
// 点与圆的关系
// -1 圆上 | 0 圆外 | 1 圆内
int is_in(const Point &p) const
{
const long double d = p.dis(c);
return abs(d - r) <= eps ? -1 : d < r - eps;
}
// 直线与圆关系
// 0 相离 | 1 相切 | 2 相交
int relation(const Line &l) const
{
const long double d = l.dis(c);
if (d > r + eps)
return 0;
if (abs(d - r) <= eps)
return 1;
return 2;
}
// 直线与圆的交点
vector<Point> inter(const Line &l) const
{
const long double d = l.dis(c);
const Point p = l.proj(c);
const int t = relation(l);
if (t == 0)
return vector<Point>();
if (t == 1)
return vector<Point>{p};
const long double k = sqrt(r * r - d * d);
return vector<Point>{p - (l.v / l.v.len()) * k, p + (l.v / l.v.len()) * k};
}
};
void solve()
{
// cout << fixed << setprecision(0);
Point pc;
Circle cir;
cin >> cir.c.x >> cir.c.y >> cir.r >> pc.x >> pc.y;
if (cir.is_in(pc) != 0)
{
cout << 0 << '\n';
cout << pc.x << " " << pc.y << '\n';
return;
}
Line l1(pc, {pc.x - cir.c.x, pc.y - cir.c.y});
vector<Point> temp = cir.inter(l1);
Point cro;
if (pc.dis2(temp[0]) < pc.dis2(temp[1]))
cro = temp[0];
else
cro = temp[1];
Point ans;
ll ansdis = 4e18;
for (ll x = max(cir.c.x - cir.r, cro.x - 100000); x <= min(cir.c.x + cir.r, cro.x + 100000); x++)
{
if (cro.y >= cir.c.y)
{
ll l = cir.c.y, r = 3e9;
while (l < r)
{
ll mid = l + r >> 1;
Point now(x, mid);
if (cir.c.dis2(now) < cir.r * cir.r)
l = mid + 1;
else
r = mid;
}
for (int y = l - 10; y <= l + 10; y++)
{
Point now(x, y);
if (cir.is_in(now) != 0)
{
ll dis2 = pc.dis2(now);
if (dis2 < ansdis)
ans = now, ansdis = dis2;
}
}
}
else
{
ll l = -3e9, r = cir.c.y;
while (l < r)
{
ll mid = l + r >> 1;
Point now(x, mid);
if (cir.c.dis2(now) <= cir.r * cir.r)
r = mid;
else
l = mid + 1;
}
for (int y = l - 10; y <= l + 10; y++)
{
Point now(x, y);
if (cir.is_in(now) != 0)
{
ll dis2 = pc.dis2(now);
if (dis2 < ansdis)
ans = now, ansdis = dis2;
}
}
}
}
for (ll y = max(cir.c.y - cir.r, cro.y - 100000); y <= min(cir.c.y + cir.r, cro.y + 100000); y++)
{
if (cro.x >= cir.c.x)
{
ll l = cir.c.x, r = 3e9;
while (l < r)
{
ll mid = l + r >> 1;
Point now(mid, y);
if (cir.c.dis2(now) < cir.r * cir.r)
l = mid + 1;
else
r = mid;
}
for (int x = l - 10; x <= l + 10; x++)
{
Point now(x, y);
if (cir.is_in(now) != 0)
{
ll dis2 = pc.dis2(now);
if (dis2 < ansdis)
ans = now, ansdis = dis2;
}
}
}
else
{
ll l = -3e9, r = cir.c.y;
while (l < r)
{
ll mid = l + r >> 1;
Point now(mid, y);
if (cir.c.dis2(now) <= cir.r * cir.r)
r = mid;
else
l = mid + 1;
}
for (int x = l - 10; x <= l + 10; x++)
{
Point now(x, y);
if (cir.is_in(now) != 0)
{
ll dis2 = pc.dis2(now);
if (dis2 < ansdis)
ans = now, ansdis = dis2;
}
}
}
}
cout << 1 << '\n';
cout << pc.x << " " << pc.y << " " << ans.x << " " << ans.y << '\n';
}
signed main()
{
ACcode;
// freopen("house.in", "r", stdin);
// freopen("house.out", "w", stdout);
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3652kb
input:
3 1 2 1 1 2 3 2 5 -10 3 0 0 1 10 0
output:
0 1 2 1 -10 3 -2 2 1 10 0 1 0
result:
ok correct (3 test cases)
Test #2:
score: 0
Accepted
time: 1ms
memory: 3768kb
input:
1 0 0 1 0 0
output:
0 0 0
result:
ok correct (1 test case)
Test #3:
score: 0
Accepted
time: 1ms
memory: 3664kb
input:
100 -1 0 2 -3 -2 0 -2 2 -2 0 2 -1 1 0 1 -1 -3 1 -1 0 -1 2 2 -1 -1 2 -2 2 0 -3 -2 -3 2 -3 -2 0 1 2 2 1 -1 0 1 -2 -2 2 -2 2 -1 -2 1 2 2 -2 2 -1 2 1 -1 2 -2 1 2 -3 -2 -1 1 1 -1 1 2 2 1 1 -3 2 0 1 -2 -1 -1 2 1 -2 0 2 -2 2 -2 -1 -2 -2 1 1 -2 -1 1 2 2 1 2 -3 1 0 -1 -3 -3 2 2 -1 2 1 1 -1 1 -3 -2 1 -2 -3 0 ...
output:
1 -3 -2 -2 -1 1 -2 0 -1 -1 1 0 1 1 -1 1 -1 0 -1 -2 1 -1 -1 -1 0 1 0 -3 0 -2 0 -3 -2 0 2 1 1 -2 -2 -1 -1 1 -1 -2 0 -2 1 -2 2 -1 2 0 -1 2 1 -3 -2 -2 -1 0 -1 1 1 1 -3 2 1 1 -2 -1 1 0 1 -2 0 -1 1 1 -2 -1 0 -2 1 1 -2 -1 -2 1 2 1 1 1 1 0 -1 1 -3 1 2 -1 -1 -3 1 -1 1 1 1 1 -2 -3 -3 -3 0 -2 -2 0 -2 -2 0 1 -1...
result:
ok correct (100 test cases)
Test #4:
score: 0
Accepted
time: 2ms
memory: 3676kb
input:
100 -5 9 1 -2 -7 3 1 6 9 2 -2 -1 2 -7 3 -10 -8 7 -8 6 0 3 9 -6 -7 6 4 9 -1 4 8 6 7 -7 7 3 -7 7 2 0 -5 -1 6 -7 -7 -5 8 7 -9 -6 -6 -5 5 -10 -9 -7 1 9 7 -2 -4 9 4 8 3 3 -9 6 2 -2 -1 -7 3 -8 2 -2 -5 4 -1 0 1 2 9 -5 5 0 9 5 -4 -1 -10 8 2 -3 -7 -8 -3 3 2 -3 3 3 7 -4 6 6 0 6 -3 5 -7 5 9 9 9 2 0 2 8 -10 2 1...
output:
1 -2 -7 -5 8 1 9 2 8 2 1 -7 3 -4 -1 1 -8 6 -10 -1 1 -6 -7 -4 -5 0 -1 4 1 -7 7 1 6 1 2 0 2 -1 1 -7 -7 -7 -6 1 -9 -6 -8 2 1 -10 -9 -10 -8 1 7 -2 2 1 1 8 3 -1 7 1 2 -2 3 -3 1 -8 2 -3 -5 1 -1 0 -2 -1 0 -5 5 1 -4 -1 -3 5 1 -3 -7 -10 6 1 2 -3 -5 -3 1 -4 6 -3 6 1 -3 5 1 3 1 9 9 1 9 1 8 -10 2 -2 1 7 -1 5 1 ...
result:
ok correct (100 test cases)
Test #5:
score: 0
Accepted
time: 1ms
memory: 3852kb
input:
100 -52 -13 72 44 58 79 -58 32 60 11 -50 21 75 95 65 -37 -61 21 -74 -40 0 -88 14 11 -49 10 -80 46 79 -17 75 -94 90 61 -34 -80 19 85 -7 -20 -72 42 56 67 -89 21 51 39 20 88 82 32 56 88 -82 3 51 31 -45 -53 50 12 91 9 46 -45 29 25 76 27 -19 -14 81 22 97 5 93 35 98 64 54 90 88 -100 63 -60 -18 81 -20 8 34...
output:
1 44 58 7 28 1 60 11 68 -28 1 95 65 22 42 1 -74 -40 -54 -49 1 11 -49 5 -75 1 79 -17 43 -48 0 61 -34 0 -7 -20 1 67 -89 -30 5 0 20 88 1 88 -82 82 -24 1 -45 -53 -10 23 0 9 46 1 76 27 -20 29 1 22 97 9 62 1 98 64 39 85 1 -100 63 -33 77 0 -20 8 1 62 16 46 51 1 -46 66 -79 -27 1 62 -91 -11 -54 1 -55 -54 73 ...
result:
ok correct (100 test cases)
Test #6:
score: 0
Accepted
time: 5ms
memory: 3740kb
input:
100 -14 48 115 -133 160 80 40 30 181 139 114 -109 102 -111 -14 -51 175 113 40 -116 -44 -171 69 6 -128 18 -23 159 94 170 -150 71 199 -167 -181 82 173 50 -138 41 -27 -126 119 195 134 -129 16 169 -103 51 183 136 117 -196 54 25 61 27 166 12 -156 63 199 -8 -56 -143 138 31 -137 125 48 16 44 -83 37 150 -16...
output:
1 -133 160 -99 125 1 181 139 102 60 1 -111 -14 19 -72 1 40 -116 -18 67 0 6 -128 1 94 170 76 125 1 -167 -181 -167 -127 1 -138 41 40 146 1 195 134 53 -38 0 -103 51 1 -196 54 69 110 1 166 12 50 51 0 -8 -56 0 -137 125 1 -83 37 5 25 1 -71 -195 9 -183 1 -77 -188 -51 120 1 -88 135 -100 -179 0 170 90 1 -25 ...
result:
ok correct (100 test cases)
Test #7:
score: 0
Accepted
time: 12ms
memory: 3724kb
input:
100 30 194 241 273 -11 476 -181 37 -18 -139 -162 496 295 113 250 -413 467 26 -100 312 -322 -120 423 -86 222 464 231 266 -421 497 249 -467 327 -183 -486 -316 486 468 -295 -286 92 141 487 -146 -13 108 -300 14 318 17 229 -180 49 -247 -464 -385 326 56 -493 62 -365 349 114 -258 293 44 -443 26 -139 -313 6...
output:
1 273 -11 217 42 1 -18 -139 439 -181 1 113 250 60 302 1 -100 312 -389 457 0 -86 222 1 -421 497 208 303 1 -183 -486 -77 -486 1 -295 -286 -316 18 0 -146 -13 1 318 17 115 -288 1 -247 -464 187 -205 1 -493 62 -408 275 1 -258 293 -264 297 1 -139 -313 23 -428 1 -458 -334 55 71 1 210 -353 304 215 0 -118 -26...
result:
ok correct (100 test cases)
Test #8:
score: 0
Accepted
time: 19ms
memory: 3668kb
input:
100 411 -186 278 885 -994 -930 792 129 -912 -596 879 -250 54 312 -682 -712 -577 304 -473 409 109 -353 664 -141 -316 117 691 571 -217 166 -596 974 792 -326 630 -15 497 654 -575 -991 -714 -567 262 847 -440 182 29 60 -584 -920 -68 -858 810 -351 -901 -429 -633 975 -244 814 881 -213 818 -870 425 173 639 ...
output:
1 885 -994 546 -429 1 -912 -596 -930 663 1 312 -682 838 -285 1 -473 409 -643 -281 0 -141 -316 1 -217 166 -189 209 0 -326 630 1 -575 -991 -248 -114 1 847 -440 -453 -545 1 -584 -920 146 -19 0 -351 -901 1 -244 814 -305 334 1 -870 425 111 63 0 -124 917 1 -109 987 80 -268 1 -421 899 421 376 1 153 -591 68...
result:
ok correct (100 test cases)
Test #9:
score: 0
Accepted
time: 10ms
memory: 3776kb
input:
100 190 562 152 560 564 -732 968 55 -887 965 -370 982 376 324 982 -263 -163 232 381 -165 -95 -654 238 258 -652 379 -43 668 -521 -36 884 782 580 267 786 -7 907 494 -802 908 970 -214 135 356 -209 410 40 139 173 42 -908 -832 24 -539 -835 806 -288 25 680 -296 -906 166 22 -873 165 -628 459 200 -122 454 -...
output:
1 560 564 342 562 1 -887 965 -787 968 1 324 982 6 982 1 381 -165 -31 -163 1 258 -652 143 -654 1 -521 -36 -289 -43 1 267 786 304 782 1 -802 908 -501 907 1 356 -209 835 -214 1 173 42 271 40 1 -539 -835 -884 -832 1 680 -296 781 -288 1 -873 165 -884 166 1 -122 454 -428 459 1 -717 -627 -764 -634 1 373 28...
result:
ok correct (100 test cases)
Test #10:
score: 0
Accepted
time: 12ms
memory: 3720kb
input:
100 885 -747 696 892 13 536 -416 299 532 74 639 295 250 636 20 532 406 91 524 208 -148 -392 337 -141 41 371 411 327 366 800 761 -461 50 758 -532 -712 -644 527 -720 -94 -724 -693 385 -731 -201 967 153 254 958 -328 -615 -291 390 -612 -950 -260 915 41 -258 136 -971 779 24 -974 -172 118 -106 509 109 -80...
output:
1 892 13 885 -51 1 532 74 536 -117 1 636 20 639 45 1 524 208 532 315 1 -141 41 -148 -55 1 366 800 371 738 1 758 -532 761 -511 1 -720 -94 -720 -118 1 -731 -201 -724 -308 1 958 -328 967 -101 1 -612 -950 -615 -681 1 -258 136 -260 874 1 -974 -172 -971 755 1 109 -805 118 -615 1 844 819 851 859 1 -230 629...
result:
ok correct (100 test cases)
Test #11:
score: -100
Wrong Answer
time: 37ms
memory: 3852kb
input:
100 -870 761 1681 -508 -1766 1437 -353 988 -96 558 -823 1649 579 285 -1783 1482 -257 84 -1412 894 1076 -1999 662 -1646 -548 -1596 779 108 1010 -1803 -1139 1322 1656 1833 -1498 -1950 -1093 1605 1813 1793 212 -107 1488 -1888 -1678 -1489 434 1415 -317 -1851 108 -1460 1947 457 1813 1762 -1366 1524 135 6...
output:
1 -508 -1766 -632 -903 1 -96 558 585 147 1 285 -1783 -655 1095 1 -1412 894 1404 -226 1 -1646 -548 489 -1693 1 1010 -1803 -1513 710 1 1833 -1498 64 184 1 1813 1793 -679 -113 1 -1888 -1678 -981 -996 1 -317 -1851 -851 -829 1 457 1813 305 477 1 135 600 794 -189 1 906 15 -1171 -210 1 795 1521 481 -196 1 ...
result:
wrong answer the distance of your solution has travelled is longer than expected. (test case 46)