Codeforces Round #818 D
D. Madoka and The Corruption Scheme
思考样例n=3 k=2 我们发现好像怎么都有一个点触及不到
我们把k变成1 发现好像有4个点触及不到 k==0 7个点触及不到
1 3 3 1 我们可以发现这恰好是组合数 而且组合数 \(\sum_0^n\) Cn^i = 2^n
这里我们用费马小定理的组合数即可
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
const int M = 998244353;
const int mod = 1000000007;
#define int long long
#define endl '\n'
#define Endl '\n'
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define inf 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int a[N],b[N];
int qmi(int a,int k,int p){
int res=1;
while(k){
if(k&1)res=(res*a)%p;
k>>=1;
a=a*a%p;
}
return res;
}
void solve() {
int n,k;cin>>n>>k;
if(k>n)k=n;
int y=1,ans=1;
while(y<=k){
ans=(ans+a[n]*b[y]%mod*b[n-y]%mod)%mod;
y++;
}
cout<<ans%mod<<endl;
}
signed main(){
fast
a[0]=b[0]=1;
for(int i=1;i<=1e5;i++){
a[i]=(a[i-1]*i)%mod;
b[i]=b[i-1]*qmi(i,mod-2,mod)%mod;
}
int T;T=1;
while(T--) {
solve();
}
return ~~(0^_^0);
}