题意:
解法:
这个n<=2000的数据范围容易让人往dp想,容易上当.
实际上只需要考虑站的位置是否被云挡住即可,
ans=P(不被云挡住)=1-P(被云挡住)=1-m/(n*n).
其中P(被云挡住)=m/(n*n)可以理解为:
有n*n个球,其中m个球被标记,随机选一个球被标记的概率,
这个概率和题目云随机的概率是相等的.
code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int ppow(int a,int b,int mod){
int ans=1%mod;a%=mod;
for(;b;a=a*a%mod,b>>=1)if(b&1)ans=ans*a%mod;
return ans;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
int n,m;cin>>n>>m;
int ans=1-m*ppow(n*n,mod-2,mod)%mod;
ans=(ans+mod)%mod;
cout<<ans<<endl;
return 0;
}