题解 P4830 【Tomoya loves Nagisa 】
Update On 2020.07.07: 优化阅读体验
题意简述:有
前置知识:概率、有理数取余(不会戳这里)
不妨先考虑直接确定是否选中正解的最后一次更换。设最后一次更换时包括当前选择的选项共有
那么需要考虑
那么可以得到最优策略:在前
小心 0 的特判。
#include<bits/stdc++.h>
#define MOD 100000007
using namespace std;
inline int poww(long long a , int b){
long long times = 1;
while(b){
if(b & 1) times = times * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return times;
}
int main(){
int n , k;
scanf("%d%d" , &n , &k);
if(k == 0)
cout << poww(n , MOD - 2);
else{
k--;
long long fz = n - 1 , fm = n;
n -= 2;
while(k){
fz = ((fm = fm * n % MOD) - fz) % MOD;
k--;
n--;
}
cout << fz * poww(fm , MOD - 2) % MOD;
}
return 0;
}