noip模拟测试15
T1:建设城市(city) 第一眼看是组合,然后看到k的限制发现是容斥 用插板法加容斥得出:$\sum_{i=0}^{m-i*k-1 \leq n-1}C_n^i*C_{m-i*k-1}^{n-1}*(-1)^i$ 但发现$n$的范围是$10^9$,组合数计算是$O(n)$的 但又发现$m$的范围是$10^7$,所以特判$n>m$的情况就行了 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<vector> 7 #include<queue> 8 #define ll long long 9 using namespace std; 10 const int MAXN=10000005; 11 const ll D=998244353; 12 ll n,m,k,ans,fac[MAXN],inv[MAXN]; 13 ll qpow(ll x,ll k) { 14 ll ret=1; 15 while(k) { 16 if(k&1) ret=ret*x%D; 17 x=x*x%D; 18 k>>=1; 19 } 20 return ret; 21 } 22 void first() { 23 fac