알고스팟(69)
-
[계산 기하] PINBALL 핀볼 시뮬레이션.
1. 벡터 이 문제는 장애물과의 충돌 유무와 충돌후 방향 벡터를 구하는 함수만 구현하면 쉽게 풀린다. 문제는 구현이다. 이 문제에서 사용한 벡터 클래스는 책에 구현되어 있는 것이다. 2. 핀볼과 장애물의 충돌 유무 판단 장애물의 중심 = c 장애물의 반지름 = r 핀볼의 방향 벡터 = dir 핀볼의 시작점 = a 장애물에서 a, a+dir 두점을 지나는 직선과의 거리 = h 라고 하자. 먼저 핀볼의 현재 상태에서 다음 충돌할 장애물을 찾아야한다. 핀볼이 충돌 할 수 있는 장애물은 h < r + 1 임을 알 수 있다. 그리고 이 조건을 만족하는 장애물들 중에서 핀볼과 가장 가까운 장애물을 선택하면된다 이것은 내분점 공식을 이용하여 구하였다. (예외 조건으로 a를 중심으로 dir과 c 가 예각을 이루어야 한..
2021.01.26 -
[정수론] POTION 마법의 약
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #include #include #include #include #include using namespace std; int T, n; int r[200]; int p[200]; vector ratio; int add[200]; void potion() { if(ratio.back()
2021.01.24 -
[정수론] PASS486 비밀번호 456
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 #include #include #include #include using namespace std; const int MAX_N = 10000001; int minfac[MAX_N]; int testCase, n, lo, hi; void era() { for(int i = 2; i testCase; for(int i = 0; i >n>>lo>>..
2021.01.24 -
[수치 해석][삼분법][시도X] FOSSIL 꽃가루 화석
1. 기하 이 문제는 위와 같이 블록 껍질이 주어졌을 때 겹치는 다각형의 최대 수직 거리를 구하는 문제이다. 기하적으로 푸는 법은 다음과 같다. - 교차되는 직선들의 교차점을 포함하고 두 블록 껍질의 교집합인 점들을 포함하는 블록껍질을 구한다. - 구한 교집합 블록껍질의 꼭지점들을 X좌표에서 수직을 그어 최대인 수직 거리를 구한다. (블록 껍질에서의 최대 수직 거리는 항상 꼭지점에서 그은 수직선이다. 기울기가 꼭짓점에서 바뀌기 때문이다.) 먼저 블록껍질의 점 하나를 다른 블록껍질의 선분들에 대응하면서 포함되는지 확인 해야 한다. 교집합이 될 수 있는 점의 범위를 최소화 하여 포함되는지 확인하자. A와 B의 X값의 최대 최소를 비교하여 X값의 범위를 A와 B의 Y값의 최대 최소를 비교하여 Y값의 범위를 줄..
2021.01.23 -
[수치 해석][이분법] RATIO 승률 올리기
1. 이분법 이 문제는 간단히 수학식으로 표현할 수 있다. Z = M*100 / N Zx = (M+x) * 100 / (N+x) Z >M; std::cout
2021.01.22 -
[수치 해석] Numerical analysis
1. 수치 해석 직접 풀기 힘든 수학 문제를 근사적으로 푸는 알고리즘 이들의 수치적 안정성, 오차의 범위 등을 연구하는 전산학의 한 분야로, 공학, 과학, 금융과학 등 다양한 범위에 널리 사용 2. 이분법(bisection method) [lo, hi] 내에서 어떤 함수 f(x)의 값이 0이 되는 지점을 수치적으로 찾아내는 기법. 답이 여러 개 있는 함수라도 연속이기만 하다면 이분법을 사용해 근을 찾을 수 있음. 이분법을 사용하기 위해서는 우선 함수의 그래프 상에서 x축 윗부분에 위치한 점 하나와 아랫부분에 위치한 점 하나르 찾아야한다. (lo, hi) 그래프가 연속인 경우 중간값 정리에 의해 두 점 사이에서 그래프가 x축을 만나는 지점이 반드시 존재한다. lo와 hi의 중간점에서 f(x)를 검사하고 만..
2021.01.22