https://www.acmicpc.net/problem/1003
/*
https://www.acmicpc.net/problem/1003
*/
#include <stdio.h>
#include <vector>
#include <utility>
#pragma warning (disable: 4996)
using namespace std;
int main(void)
{
// 점화식
// f(n) = f(n - 1) + f(n - 2)
int testCaseNum = 0;
scanf("%d", &testCaseNum);
// index: f(N)에서 n을 index로 사용한다.
// first: 0이 출력된 횟수, second: 1이 출력된 횟수
vector< pair<int, int> > v;
v.push_back(pair<int, int>(1, 0));
v.push_back(pair<int, int>(0, 1));
for (int tcLoop = 0; tcLoop < testCaseNum; tcLoop++)
{
size_t testCase = 0;
scanf("%d", &testCase);
// 아직 계산되지 않은 영역이라면, 계산해서 넣어준다.
while (testCase >= v.size())
{
size_t nowSize = v.size();
int first = v[nowSize - 1].first + v[nowSize - 2].first;
int second = v[nowSize - 1].second + v[nowSize - 2].second;
v.push_back(pair<int, int>(first, second));
}
printf("%d %d\n", v[testCase].first, v[testCase].second);
}
return 0;
}
| cs |
댓글 없음:
댓글 쓰기