# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
131996 |
2019-07-18T07:28:14 Z |
임유진(#3191) |
Fences (JOI18_fences) |
C++14 |
|
2 ms |
376 KB |
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
typedef long double ld;
typedef long long lint;
typedef pair<lint, lint> pll;
lint dp(pll a, pll b) { return a.fi * b.fi + a.se * b.se; }
ld len(pll a) { return sqrt((ld) dp(a, a)); }
pll mns(pll a, pll b) { return mp(a.fi - b.fi, a.se - b.se); }
ld dis(pll a, pll b) { return len(mns(a, b)); }
ld perp(pll u, pll v) { return sqrt(dp(v, v) - (ld) dp(u, v) * dp(u, v) / dp(u, u)); }
void print(pll a) { printf("(%lld, %lld)\n", a.fi, a.se);}
int main() {
int N, S, A, B, C, D;
scanf("%d%d", &N, &S);
if(N != 1) return 0;
scanf("%d%d%d%d", &A, &B, &C, &D);
if(A + C < 0) {
A *= -1;
C *= -1;
}
if(B + D < 0) {
B *= -1;
D *= -1;
}
if(A - B > C - D) {
swap(A, C);
swap(B, D);
}
//printf("(%d, %d), (%d, %d)\n", A, B, C, D);
ld ans = 8.0L * S;
ld a, b;
pll p1, p2, x, u, v1, v2;
p1 = mp(A, B), p2 = mp(C, D), u = mns(p2, p1);
if(B < S || u.fi * u.se > 0) {
x = mp(S, S);
a = 2 * S;
}
else {
x = mp(-S, S);
a = 0.0L;
}
//print(x);
v1 = mns(p1, x), v2 = mns(p2, x);
//print(u);
//print(v1);
if(dp(u, v1) < 0 && dp(u, v2) > 0) {/*printf("*");*/a += perp(u, v1);}
else a += len(v1);
swap(A, D);
swap(B, C);
p1 = mp(A, B), p2 = mp(C, D), u = mns(p2, p1);
if(B < S || u.fi * u.se < 0) {
x = mp(S, S);
b = 2 * S;
}
else {
x = mp(-S, S);
b = 0.0L;
}
v1 = mns(p1, x), v2 = mns(p2, x);
//print(v1);
if(dp(u, v1) < 0 && dp(u, v2) > 0) {/*printf("*");*/b += perp(u, v1);}
else b += len(v1);
ans = min(ans, a + b + 4 * S);
//printf("a = %Lf, b = %Lf\n", a, b);
printf("%.20Lf", ans);
return 0;
}
Compilation message
fences.cpp: In function 'int main()':
fences.cpp:22:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &N, &S);
~~~~~^~~~~~~~~~~~~~~~
fences.cpp:24:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d%d", &A, &B, &C, &D);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
256 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
256 KB |
Output is correct |
5 |
Incorrect |
2 ms |
376 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
256 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
256 KB |
Output is correct |
5 |
Incorrect |
2 ms |
376 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
256 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
256 KB |
Output is correct |
5 |
Incorrect |
2 ms |
376 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |