No.117 組み合わせの数 - yukicoder
class CombinationNumber {
public:
void solve(void) {
const int Mod = (int)(1e+9)+7;
const int maxN = (int)1e+6;
nCombP nCr(2*maxN,Mod);
auto &fact = nCr.fact_;
int T;
cin>>T;
REP(_, T)
{
char type, a,b,c;
int n,k;
cin>>type>>a>>n>>b>>k>>a;
(void)a;
(void)b;
(void)c;
switch (type)
{
case 'C':
cout<<nCr(n,k)<<endl;
break;
case 'P':
cout<<(fact[k]*nCr(n,k))%Mod<<endl;
break;
case 'H':
if (n==0 && k==0)
cout<<1<<endl;
else
cout<<nCr(n+k-1,k)<<endl;
break;
default:
assert(false);
}
}
}
};