SWEA::1265 달란트2


N=10일때

M=2 : (1,9) / (2,8)/ (3,7)/ (4,6)/ (5,5)/ 의 경우가 가능한데 가장 큰 값은 중간값인 (5,5)인 경우이다.

이처럼 N/M을 통해 중간 값을 찾아주면 되는데 나머지가 생기는 경우 나머지 만큼의 경우에 대해서는  +1 해준 값을 곱해주면된다. 아마 가장 큰 값이 N=100, M=32인 경우 같은데 이경우 16자리가 나오고 이는 C++기준 long long형으로 연산시 연산이 가능하다.


P.S) long long 형 처음 출력해봤다. 굉장히 긴게 신기하다.


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
#include <stdio.h>
using namespace std;
 
int n, m, x, y;
long long res;
 
int main() {
 
    int tc;
    scanf("%d"&tc);
 
    for (int t = 1; t <= tc; t++) {
        
        res = 1;
        scanf("%d %d"&n, &m);
        x = n / m;
        y = n % m;
        
        for (int i = 0; i < m - y; i++) {
            res *= x;
        }
        x++;
        for (int i = 0; i < y; i++) {
            res *= x;
        }
 
        printf("#%d %lld\n", t, res);
    }
}
cs


'SWEA::문제풀이' 카테고리의 다른 글

2105 디저트 카페  (0) 2018.01.21
2817 부분수열의 합  (0) 2018.01.19
1494 사랑의 카운슬러  (0) 2018.01.14
1952 수영장  (1) 2018.01.09
1219 길찾기  (0) 2018.01.08

+ Recent posts