-
[2502] 떡 먹는 호랑이BOJ 2021. 10. 17. 16:59
https://www.acmicpc.net/problem/2502
2502번: 떡 먹는 호랑이
첫줄에 첫 날에 준 떡의 개수 A를 출력하고 그 다음 둘째 줄에는 둘째 날에 준 떡의 개수 B를 출력한다. 이 문제에서 주어진 D, K에 대해서는 항상 정수 A, B (1≤A≤B)가 존재한다.
www.acmicpc.net
<문제>
점화식의 정의에 맞춰서, 1번째 초기값과 2번째 초기값이 몇개씩 들어갔는지를 파악한다.
모든 (a,b)의 조합을 뽑으려면 O(K^2), K=10만이지만
a를 먼저 k에서 제하고 남은것이 b로도 나누어 떨어진다면 가능한 (a,b)이므로
O(K)만에 답을 찾을 수 있다.
다만 이 문제는 2중 for로 돌려도 조기에 break가 발생하여 TLE가 안나오는 것 같다.
<소스코드>
12345678910111213141516171819202122#include <bits/stdc++.h>using namespace std;vector<pair<int, int>> v;int d, k;int main(void) {cin >> d >> k;v.resize(d + 1);v[0] = {0, 0};v[1] = {1, 0};v[2] = {0, 1};for (int i = 3; i <= d; i++)v[i] = {v[i - 2].first + v[i - 1].first,v[i - 2].second + v[i - 1].second};for (int a = 1; a <= k; a++) {int x = k - v[d].first * a;if (x % v[d].second == 0) {cout << a << '\n' << x / v[d].second;break;}}return 0;}cs 'BOJ' 카테고리의 다른 글
[5427] 불 (0) 2021.10.19 [1213] 팰린드롬 만들기 (0) 2021.10.19 [3197] 백조의 호수 (0) 2021.10.17 [16948] 데스 나이트 (0) 2021.10.17 [7562] 나이트의 이동 (0) 2021.10.16