링크 :
https://vjudge.net/problem/LightOJ-1067
질문의 의미 :
을 감안할 때 n은 다른 개체, 당신은 그들 중 K를 먹고 싶어. 얼마나 많은 방법을 할 수있는가?
예를 들어, 4 개 항목이 말한다; 당신은 그들 중 2 먹고 싶어. 그래서, 당신은 그것을 6 가지 방법으로 할 수 있습니다.
1, 2를 타고
1, 3을 가지고
1, 4를 타고
2, 3을 가지고
2, 4를 타고
3 ~ 4를 타고
아이디어 :
조합의 수입니다.
코드 :
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<utility>
using namespace std;
typedef long long LL;
const int INF = 1e9;
const int MAXN = 1e6+10;
const int MOD = 1e6+3;
int n, k;
int P[MAXN];
LL PowMod(int a, int b)
{
LL res = 1;
while(b)
{
if (b&1)
res = (1LL*res*a)%MOD;
a = (1LL*a*a)%MOD;
b >>= 1;
}
return res;
}
void Init()
{
P[1] = 1;
for (int i = 2;i < MAXN;i++)
P[i] = 1LL*i*P[i-1]%MOD;
}
int main()
{
Init();
int cnt = 0;
int t;
scanf("%d", &t);
while(t--)
{
printf("Case %d:", ++cnt);
scanf("%d%d", &n, &k);
if (k == 0 || n == k)
{
puts(" 1");
continue;
}
int tmp = 1LL*P[k]*P[n-k]%MOD;
tmp = PowMod(tmp, MOD-2);
printf(" %lld\n", 1LL*P[n]*tmp%MOD);
}
return 0;
}