문제링크 : https://www.acmicpc.net/problem/24228
24228번: 젓가락
두 개의 정수 $N, R$이 주어진다. $(1 ≤ N,R ≤ 10^{18})$
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
ll N, R;
cin >> N >> R;
cout << N+1 + (R-1)*2; //등차가 2인 등차수열
return 0;
}
일단 입력받는 수의 범위가 굉장히 크므로 long long으로 선언한다.
그리고 예시를 하나 정하여 각 짝별로 값을 비교하여 규칙을 구했다.
N = 3 (A, B, C) 가정
R = 1 가정
최악의 케이스는 A, B, C를 모두 고르고 3개 중에 아무거나 골라도 1짝이 완성되기에 3 + 1 = 4이다.
여기서 A 골랐다고 가정
R = 2 가정
1짝일때 + 1짝을 더 추가해주면 된다.
1짝일때 고른 값과 (중복 발생), 남은 것 중 아무거나 골라도 1짝이 완성되기에 4 + 2 = 6이다.
A 선택 (중복) + B, C 중 아무거나 하나 선택 (여기서 B 골랐다고 가정)
R = 3 가정
2짝일때 + 1짝을 더 추가해주면 된다.
2짝일때 고른 값과 (중복 발생), 남은 것 중 아무거나 골라도 1짝이 완성되기에 6 + 2 = 8이다.
A와 B 선택 (중복), 남은 C 선택
규칙을 보면 2씩 증가하는 등차수열 인 것을 알 수 있다.
따라서 등차수열 공식을 이용할 수 있다.
An = A + (n-1)d
A = N+1
n = R
d= 2
-> N+1 + (R-1)*2
'백준 > 실버' 카테고리의 다른 글
[백준 2853번] 배 (C++) (0) | 2023.07.12 |
---|---|
[백준 17074번] 정렬 (C++) (0) | 2023.07.10 |
[백준 11441번] 합 구하기 (C++) (0) | 2023.07.06 |
[백준 10211번] Maximum Subarray (C++) (0) | 2023.07.05 |
[백준 13900번] 순서쌍의 곱의 합 (C++) (0) | 2023.07.04 |