제 1회 플로우컵 풀이

2020. 8. 26. 23:48PS/Geometry

풀이 올려놓는다고 2달 전에 했던 거 같은데 아직도 안 풀어서 이제야 올린다.

 

A. 원의 분할

https://www.acmicpc.net/problem/16478

 

16478번: 원의 분할

장난꾸러기 혁주는 어렸을 때부터 가위를 아주 잘 다루었다. 그래서 그는 색종이를 가위로 아무렇게나 자르는 것을 좋아한다. 혁주는 오늘 친구에게 원 모양의 색종이를 생일 선물로 받았다. 그

www.acmicpc.net

중3 수학만 알아도 껌 같은 문제.

자세한 설명은 생략한다.

#include <bits/stdc++.h>
#define MEM 200004
#define sanic ios_base::sync_with_stdio(0)
#define MOD 1000000007
#define f first
#define s second
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
ll n,m,k;
int main(){
    cin >> n >> m >> k;
    cout.precision(7);
    cout << fixed;
    cout << (n*k*1.0)/m/1.0;
    return 0;
}

B. 컵라면 측정하기

https://www.acmicpc.net/problem/16479

 

16479번: 컵라면 측정하기

첫째 줄에 K의 값이 주어진다. 둘째 줄에는 D1과 D2의 값이 사이에 공백을 한 개 두고 차례대로 주어진다. 단, K, D1, D2의 값은 양의 정수이다.

www.acmicpc.net

피타고라스 정리를 이용한다. A번보다 더 심하게 껌 같은(?) 문제

#include <bits/stdc++.h>
#define MEM 200004
#define sanic ios_base::sync_with_stdio(0)
#define MOD 1000000007
#define f first
#define s second
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
ll n,m,k;
int main(){
    cin >> n >> m >> k;
    cout.precision(7);
    cout << fixed;
    cout << n*n-((m-k)/2.0)*((m-k)/2.0);
    return 0;
}

C. 외심과 내심은 사랑입니다.

https://www.acmicpc.net/problem/16480

 

16480번: 외심과 내심은 사랑입니다

수진이는 외심과 내심 없이는 살 수 없다고 말할 정도로 외심과 내심을 사랑한다. 하지만, 갑자기 수진에게 어려운 일이 닥쳤다. 바로 평면에 있는 삼각형 ABC에서 외접원의 반지름의 길이 R이고,

www.acmicpc.net

외심과 내심의 거리를 구하는 문제이다.

이는 오일러 삼각형 정리라고 아주 널리 알려져 있다.

d=외심과 내심의 거리, R=외접원 반지름, r=내접원 반지름

d^2=R(R-2r)이 성립한다.

#include <bits/stdc++.h>
#define MEM 10004
#define sanic ios_base::sync_with_stdio(0)
#define pb push_back
#define f first
#define s second
using namespace std;
typedef long long ll;
const ll mod = 1000000007LL;
const ll INF = 1e9+7;
ll R,r;
main() {
    sanic;
    cin >> R >> r;
    cout << R*(R-2*r);
}

D. 원 전문가 진우

https://www.acmicpc.net/problem/16481

 

16481번: 원 전문가 진우

첫째 줄에 r1, r2, r3의 값이 사이에 공백을 한 개씩 두고 차례대로 주어진다. 주어지는 모든 수는 1,000 이하의 양의 정수이다.

www.acmicpc.net

루리에 정리를 이용하면 쉽게 풀 수 있다. 

r1,r2,r3=각 방접원의 반지름, r=내접원의 반지름

r을 구하자.

#include <bits/stdc++.h>
#define MEM 200004
#define sanic ios_base::sync_with_stdio(0)
#define MOD 1000000007
#define f first
#define s second
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
ll n,m,k;
int main(){
    cin >> n >> m >> k;
    cout.precision(7);
    cout << fixed;
    cout << (n*m*k*1.0)/(n*m+m*k+k*n);
    return 0;
}

E. 한 점에서 만나라

https://www.acmicpc.net/problem/16482

 

16482번: 한 점에서 만나라!

영철이는 작도하는 것을 좋아한다. 특히, 삼각형을 이용해서 작도하는 것을 더 좋아한다. 영철이가 종이에 삼각형 ABC를 그리고, 변 AB의 길이를 c, 변 BC의 길이를 a, 변 CA의 길이를 b라고 정했다. �

www.acmicpc.net

체바 정리로 짜증나게(?) 풀 수 있다.

식 정리 귀찮다.

a,b,c = 문제에 나온 대로 정의, 선분 AF = d, 선분 BD = e, 선분 CE = f

식 쓰느라 죽는 줄 알았다;;

#include <bits/stdc++.h>
#define MEM 10009
#define sanic ios_base::sync_with_stdio(0)
#define pb push_back
using namespace std;
typedef int ll;
typedef pair<ll, ll> pii;
const ll MOD = 1e9+7;
ll n,a,b,c,d,e;
int main()
{
    cin >> a >> b >> c >> d >> e;
    cout.precision(7);
    cout << fixed << (double)(b*(c-d)*(a-e)*1.0/(d*e*1.0+(c-d)*(a-e)*1.0));
}

F. 접시 안의 원

https://www.acmicpc.net/problem/16483

 

16483번: 접시 안의 원

첫째 줄에 양의 정수 T의 값이 주어진다. 단, T의 값은 10,000 이하이다.

www.acmicpc.net

그냥 피타고라스 정리 문제이다.

정의는 문제 설명대로 한다.

#include <bits/stdc++.h>
#define MEM 10009
#define sanic ios_base::sync_with_stdio(0)
#define pb push_back
using namespace std;
typedef int ll;
typedef pair<ll, ll> pii;
const ll MOD = 1e9+7;
ll n;
int main()
{
    cin >> n;
    cout << n*n/4;
}

G. 작도하자! -

https://www.acmicpc.net/problem/16484

 

16484번: 작도하자! - ①

오늘 낮에 심심해서 작도 왕인 재원이가 종이에 원 하나를 그렸다. 그 다음, 원의 임의의 현 XY를 그렸다. 현 XY의 중점을 M이라고 한 뒤, M을 지나는 현 AB, CD를 그었다. 그리고 선분 AD와 현 XY가 만

www.acmicpc.net

나비 정리를 써서 PM=MQ이다.

그러므로 QY의 길이를 구할 수 있다.

문제에서 정의한 문자대로 하면

QY의 길이 = (n-d*2)/2

#include <bits/stdc++.h>
#define MEM 200004
#define sanic ios_base::sync_with_stdio(0)
#define MOD 1000000007
#define f first
#define s second
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
ll n,m,k;
int main(){
    cin >> n >> m;
    cout.precision(1);
    cout << fixed;
    cout << (n-m*2)/2.0;
    return 0;
}

H. 작도하자! - ②

https://www.acmicpc.net/problem/16485

 

16485번: 작도하자! - ②

첫째 줄에 c, b의 값이 사이에 공백을 한 개 두고 차례대로 주어진다. (c와 b의 값은 1,000,000,000 이하의 양의 정수이다.)

www.acmicpc.net

중2 수학에서 각의 이등분선 정리를 알면 꿀인 문제.

#include <bits/stdc++.h>
#define MEM 100001
#define sanic ios_base::sync_with_stdio(0)
using namespace std;
typedef unsigned long long ull;
typedef pair<int, int> pi;
typedef pair<int, pair<int, int>> pii;
int par[MEM], a, b, ans;
int main()
{
    sanic;
    cin >> a >> b;
    cout.precision(10);
    cout << fixed << a/(b*1.0);
}

I. 운동장 한 바퀴

https://www.acmicpc.net/problem/16486

 

16486번: 운동장 한 바퀴

첫째 줄에 d1의 값이 주어진다. 둘째 줄에는 d2의 값이 주어진다. (d1, d2의 값은 100,000 이하의 양의 정수)

www.acmicpc.net

초등학교 5학년 이상이면 다 알거라 믿는다. ㅎ

#include <bits/stdc++.h>
#define MEM 100001
#define sanic ios_base::sync_with_stdio(0)
using namespace std;
int a, b;
int main(){
	cin >> a >> b;
	cout.precision(6);
	cout << fixed << a*2+2*b*3.141592;
	return 0;
}

J. 말 타기

https://www.acmicpc.net/problem/16487

 

16487번: 말 타기

첫째 줄에 a, b, c의 값이 사이에 공백을 한 개씩 두고 차례대로 주어진다. 둘째 줄에는 m의 값이 주어진다. (단, 주어지는 값들은 모두 양의 정수이며, 점 A가 b, c의 값으로 인해 운동장의 내부에 ��

www.acmicpc.net

스튜어트 정리를 이용해 짜증나게(?) 풀어주면 된다.

식 정리 귀찮다.

#include <bits/stdc++.h>
#define MEM 10009
#define sanic ios_base::sync_with_stdio(0)
#define pb push_back
using namespace std;
typedef int ll;
typedef pair<ll, ll> pii;
const ll MOD = 1e9+7;
ll n,a,b,c,m;
int main()
{
    cin >> a >> b >> c >> m;
    n = b-m;
    cout.precision(7);
    cout << fixed << (double)(((c*c*m+a*a*n)*1.0/b*1.0)-m*n*1.0);
}

K. 피카츄가 낸 어려운 문제

https://www.acmicpc.net/problem/16488 

 

16488번: 피카츄가 낸 어려운 문제

맨날 학교 칠판에 이등변삼각형을 그리고 노는 피카츄가 어느 날, 칠판에 변 AB와 변 AC의 길이가 모두 N인 이등변 삼각형을 그린 다음, 친구들에게 아래와 같은 문제를 냈다. 이등변삼각형 ABC에��

www.acmicpc.net

#include <bits/stdc++.h>
#define sanic ios_base::sync_with_stdio(0);
#define MEM 1000090
#define f first
#define s second
using namespace std;
typedef long long ll;
typedef pair<ll, ll> p;
ll n,t;
int main(){
	sanic; cin.tie(0);
	cin >> n >>t;
	cout << n*n*t;
}

L. 삼각형 해커

https://www.acmicpc.net/problem/16489

 

16489번: 삼각형 해커

서울특별시에는 삼각형의 정보를 캐는 삼각형 해커가 있다. 삼각형 해커에게는 항상 예각삼각형의 세 변의 길이만 주어진다. 이때, 삼각형 해커는 그 삼각형의 넓이 S, 외접원의 반지름의 길이

www.acmicpc.net

진짜 풀이 쓰기 싫은 문제다.

각 소문제별로 풀이한다.

S -> 헤론의 공식. (삼각형의 세 변의 길이가 주어졌을 때 그 넓이를 구하는 공식)

 

R -> 

R = 외접원의 반지름, a,b,c=각 변의 길이, S=넓이

사인 법칙만을 이용하는 게 편한데 실수 오차 + 사인 함수 구현 싫증 때문에 식을 변형했다.

 

r -> 간단한 식정리다. 중학 도형을 배웠다면 알 거라 생각한다.

d -> 오일러의 삼각형 정리

R = 외접원의 반지름, r = 내접원의 반지름, d = 외심과 내심 사이의 거리

위 그림에서 식은 R>=2r일 때만 성립한다.

R<2r이 아닐 때 0을 출력해주면 된다.

 

k->카르노의 정리에 의해 k=R+r

 

아 그리고 이 문제 진짜 더럽다. 그래서 python decimal을 써서 풀었다. 

from decimal import *
import math
getcontext()
getcontext().prec = 14
a,b,c = map(Decimal, input().split())
s=(a+b+c)/2
S=Decimal(str(math.sqrt(s*(s-a)*(s-b)*(s-c))));
print(math.sqrt(s*(s-a)*(s-b)*(s-c)))
print(a*b*c/(4*S))
print(2*S/(a+b+c))
d=(a*b*c/(4*S)-(4*S/(a+b+c)))
if d<=0 :
    d=0
else :
    d=math.sqrt(a*b*c/(4*S)*d)
print(d)
print(a*b*c/(4*S)+2*S/(a+b+c))

M. 외계인의 침투

https://www.acmicpc.net/problem/16490

 

16490번: 외계인의 침투

첫 번째 줄에 a와 t의 값이 사이에 공백을 한 개 두고 차례대로 주어진다. (단, a와 t의 값은 100 이하의 양의 정수이고, a와 t의 값으로 인해 문제의 상황이 만들어질 수 없는 경우는 주어지지 않는

www.acmicpc.net

중학교 3학년 2학기 에이급 문제집을 비슷한 문제가 있는 것 같아서 손쉽게 풀 수 있었다.

삼각형 ABP를 60도 돌리면 삼각형 ACE가 되고 삼각형 APE는 정삼각형이 된다.

정삼각형이 되는 이유는 삼각형 ABP와 삼각형 ACE가 합동이므로 각 PAE가 60도, 선분 AP, AE가 같기 때문이다.

#include <bits/stdc++.h>
#define MEM 8001
#define sanic ios_base::sync_with_stdio(0)
#define MOD 1000000
#define f first
#define s second
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
double a,b,c;
int main(){
    sanic;
    cin >> a >> b;
    cout << a*a-b*b;
}

모든 문제가 기하였고, 개인적으로 E, J, L이 제일 힘들었던 것 같다.

사실 제일 힘든게 이 글 쓰는 것이었다 진짜 뒤지는 줄