본문 바로가기
카테고리 없음

백준 1565 N포커

by ash9river 2024. 5. 11.

경우의 수 오랜만에 세니까 너무 재밌다.

그냥 무난하게 풀이

MOD연산할 때, -이면 오버플로우 주의

#include <iostream>
#include <vector>
#include <algorithm>
#define ll long long
#define MOD 10007
using namespace std;
vector<vector<ll>> c(53,vector<ll>(53,0));
ll binominal(int n,int r){
    if(r==0||r==n) return c[n][r]=1;
    ll& ret=c[n][r];
    if(ret!=0) return ret;
    return ret=binominal(n-1,r-1)+binominal(n-1,r); 
}
int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin>>n;
    ll ans=0;
    for(int i=4;i<=n;i+=4){
        if(i%8==0){
            ans=(ans-(binominal(13,i/4)*binominal(52-i,n-i))%MOD+MOD)%MOD;
        }
        else{
            ans=(ans+(binominal(13,i/4)*binominal(52-i,n-i))%MOD)%MOD;
        }
    }
    cout<<ans;
}