QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#295654 | #5067. Two Walls | zzuqy# | WA | 0ms | 3796kb | C++14 | 2.8kb | 2023-12-31 18:16:57 | 2023-12-31 18:16:57 |
Judging History
answer
#include <bits/stdc++.h>
#define EPS 1e-9
struct Vector {
long long x, y;
inline Vector() {
}
inline Vector(long long x, long long y) {
this->x = x;
this->y = y;
}
inline Vector operator - (const Vector &a)const {
return (Vector) {
x - a.x, y - a.y
};
}
inline long long operator * (const Vector &a)const {
return x * a.x + y * a.y;
}
inline long long operator ^ (const Vector &a)const {
return x * a.y - y * a.x;
}
inline long long dis() {
return x * x + y * y;
}
inline int operator == (Vector a) {
return a.x == x && a.y == y;
}
};
inline int sign(long long a) {
if (a == 0)
return 0;
return a > 0 ? 1 : -1;
}
inline int in(Vector a, Vector p, Vector q) {
return ((p - a) * (q - a)) < 0;
}
inline int check(Vector a, Vector b, Vector c, Vector d) {
if (!sign((d - c) ^ (b - a))) {
if (in(a, c, d) || in(b, c, d) || in(c, a, b) || in(d, a, b)) {
return 1;
}
return 0;
}
int cc = sign((c - a) ^ (c - b));
int dd = sign((d - a) ^ (d - b));
int aa = sign((a - c) ^ (a - d));
int bb = sign((b - c) ^ (b - d));
return cc != dd && aa != bb;
}
inline double dis(Vector x, Vector a, Vector b) {
double len = (a - b) * (x - b) / std::sqrt((a - b).dis());
return (x - b).dis() - len * len ;
}
int main() {
int $;
scanf("%d", &$);
while ($--) {
Vector a;
Vector b;
Vector c1;
Vector c2;
Vector d1;
Vector d2;
scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld",
&a.x, &a.y, &b.x, &b.y, &c1.x, &c1.y, &c2.x, &c2.y, &d1.x, &d1.y, &d2.x, &d2.y);
if (!check(a, b, c1, c2) && !check(a, b, d1, d2)) {
puts("0");
} else if (c1 == d1 || c2 == d1 || c1 == d2 || c2 == d2) {
puts("1");
} else if (!sign((d2 - d1) ^ (c2 - c1))) {
puts("1");
} else if (!check(c1, c2, d1, d2)) {
puts("1");
} else if (check(a, b, c1, c2) + check(a, b, d1, d2) == 1) {
puts("1");
} else if (!sign((b - a) ^ (c2 - c1)) || !sign((b - a) ^ (d2 - d1))) {
puts("1");
} else {
Vector a0(0, 0), a1(0, 0);
Vector b0(0, 0), b1(0, 0);
if (!check(a, c1, d1, d2)) {
a0 = c1;
} else {
a0 = c2;
}
if (!check(a, d1, c1, c2)) {
a1 = d1;
} else {
a1 = d2;
}
if (!check(b, c1, d1, d2)) {
b0 = c1;
} else {
b0 = c2;
}
if (!check(b, d1, c1, c2)) {
b1 = d1;
} else {
b1 = d2;
}
// printf("%lf %lf %lf %lf\n", dis(a, b, b1), dis(a0, b, b1), dis(a, b, b0), dis(a1, b, b0));
if (((double)((b - a) * (a0 - a))) / (b - a).dis() / (a0 - a).dis() >EPS+ ((double)((b - a) * (b1 - b))) / (b - a).dis() /
(b1 - b).dis()
|| ((double)((b - a) * (a1 - a))) / (b - a).dis() / (a1 - a).dis() >EPS+ ((double)((b - a) * (b0 - b))) / (b - a).dis() /
(b0 - b).dis()) {
puts("1");
} else {
puts("2");
}
}
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3796kb
input:
3 0 0 1 1 2 2 3 3 4 4 5 5 0 0 1 1 2 2 3 3 2 2 3 3 0 0 10 10 10 0 0 10 1 1 2 2
output:
0 0 1
result:
ok 3 number(s): "0 0 1"
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3632kb
input:
2 -999999999 999999998 999999999 999999998 -1000000000 -1000000000 1000000000 1000000000 1000000000 -1000000000 -1000000000 1000000000 -999999999 999999998 999999999 999999998 -999999998 -999999998 1000000000 1000000000 999999998 -999999998 -1000000000 1000000000
output:
2 2
result:
wrong answer 2nd numbers differ - expected: '1', found: '2'