오늘 수학학원에서 배운 내용이 사실상 그대로 나왔다.
그냥 M개중에 N개 뽑아서
순서대로 할당해주면
겹치지 않게 다리를 놓을 수 있다
그렇게 보면 이 문제는 단순히 mCn을 구하는 문제로 변한다.
https://www.acmicpc.net/problem/1010
1010번: 다리 놓기
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
www.acmicpc.net
#include <stdio.h>
typedef long long int ll;
ll nCr(ll n, ll r){
ll sum = 1;
for(int i=0; i<r; i++){
sum*=(n-i);
sum/=(i+1);
}
return sum;
}
int main(){
int n,m,t;
scanf("%d", &t);
while(t--){
scanf("%d %d", &n, &m);
printf("%lld\n", nCr(m,n));
}
return 0;
}
오버플로우가 날 수 있으므로 매번 나눠주어야 한다
간단히 AC.
반응형