답안 #131996

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
131996 2019-07-18T07:28:14 Z 임유진(#3191) Fences (JOI18_fences) C++14
0 / 100
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);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 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 -
# 결과 실행 시간 메모리 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 -
# 결과 실행 시간 메모리 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 -