티스토리 뷰
https://www.acmicpc.net/problem/26518
26518번: 수열의 극한값
첫 번째 줄에 정수 $b$, $c$, $a_1$, $a_2$가 공백으로 구분되어 주어진다. $(1 \leq b, c, a_1, a_2 \leq 10^9)$
www.acmicpc.net
문제풀이
$$a_i = b*a_{i-1} + c*a_{i-2} (i \geq 3)$$
수열 a가 주어졌을때
$$\lim_{n \to inf}\frac{a_n}{a_{n-1}}$$
값을 구하는 문제로써 문제에서 항상 이 값이 수렴되어짐이 보장되어 있다.
문제에서 주어지는 정수범위로 인해 순차적으로 수열값(a_n)을 구하면서 극한 값을 접근하는 시도는 long long int를 사용하더라도 오버플로우가 발생한다.
따라서 적절하게 식을 변형시켜 오버플로우를 방지해주어야 한다.
$$a_n = b*a_{n-1} + c*a_{n-2}, 양변에 a_{n-1} 나누기 $$
$$\lim_{n \to inf}\frac{a_n}{a_{n-1}} = b + c*\lim_{n \to inf}\frac{a_{n-2}}{a_{n-1}}$$
$$\frac{a_n}{a_{n-1}} 값이 x일때 \, \frac{a_{n+1}}{a_n}값은 b+\frac{c}{x}이다.$$
극한값이 수렴하니 n을 계속증가하여 일정한 값이 나올때까지 반복하면된다.
코드
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0), cin.tie(0);
int b, c, a1, a2;
double past, cur;
cin >> b >> c >> a1 >> a2;
past = (double)a1/a2;
cout << fixed;
cout.precision(6);
while(true) {
cur = c/past + b;
if((float)cur == (float)past) {
cout << cur << '\n';
break;
}
past = cur;
}
return 0;
}
'백준 문제풀이' 카테고리의 다른 글
백준[baekjoon] 27469 (0) | 2023.02.12 |
---|---|
백준[baekjoon] 2961 (0) | 2023.01.25 |
백준[baekjoon] 17142 (0) | 2021.05.09 |
백준[baekjoon] 6064 (0) | 2021.02.15 |
백준[baekjoon] 2336 (0) | 2021.02.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- pygame
- 백준 27469
- 백준
- ndisplay
- UE5.3
- tetris
- 브레젠험 알고리즘
- 홍정모의 게임 만들기 연습 문제 패키지
- unreal enigne
- BOJ 27469
- 숫자판 만들기
- 언리얼 프로젝트 재생성
- DP
- ICPC 후기
- OpenVDB
- 퀸 움직이기
- 언리얼 프로젝트 재생성 자동화
- 코드포스
- C++게임
- 언리얼 자동화
- Unreal Engine
- 테트리스
- Python
- Codeforces
- 백준 2365
- 정보올림피아드
- C++게임개발
- 초등부
- BOJ 2365
- opengl
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함