标签:le return HDU6397 int res LL Encoding Character const
Problem - 6397 Character Encoding
题意:给定 \(n,m,k\) 问有多少种方案使得 \(\sum_{i=1}^m x_i = k(0 \le x_i \le n)\)
知识点:容斥
先考虑无 \(n\) 限制的情况,问题等价与 \(\sum_{i=1}^m x_i = k + m(1 \le x_i)\)
这个可以隔板法得出 \(m+k-1 \choose m-1\)
再考虑容斥,设至少有 \(i\) 个 \(x\) 是等于 \(n\) 的方案为 \(f_i\) 则有
\[f_i = {m \choose i} * {m + k - i * n - 1 \choose m - 1} \]最后容斥即可
答案为
\[ans = \sum_{i=0}^m (-1)^i * f_i \]#include <bits/stdc++.h>
#define endl '\n'
#define ls u << 1
#define rs u << 1 | 1
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL,LL> PLL;
const int INF = 0x3f3f3f3f, N = 3e5 + 10;
const int MOD = 998244353;
const double eps = 1e-6;
const double PI = acos(-1);
inline int lowbit(int x) {return x & (-x);}
LL f1[N], f2[N];
LL q_pow(LL a, LL b, LL p) {
LL res = 1;
for (; b; b >>= 1) {
if (b & 1) res = res * a % p;
a = a * a % p;
}
return res;
}
LL C(LL n, LL m) {
if (n < m) return 0;
if (n < 0 || m < 0) return 0;
if (n == m) return 1;
return f1[n] * f2[m] % MOD * f2[n - m] % MOD;
}
inline void solve() {
LL n, m, k; cin >> n >> m >> k;
LL res = 0;
int ops = 1;
for (LL i = 0; i <= m; i ++ ) {
res = (res + 1ll * ops * C(m, i) * C(m + k - 1 - i * n, m - 1) % MOD + MOD) % MOD;
ops *= -1;
}
cout << res << endl;
}
signed main() {
#ifdef DEBUG
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
auto now = clock();
#endif
ios::sync_with_stdio(false), cin.tie(nullptr);
cout << fixed << setprecision(2);
int n = 300000;
f1[0] = 1;
for (int i = 1; i <= n; i ++ ) f1[i] = f1[i - 1] * i % MOD;
f2[n] = q_pow(f1[n], MOD - 2, MOD);
for (int i = n; i; i -- ) f2[i - 1] = f2[i] * i % MOD;
int T; cin >> T;
while (T -- )
solve();
#ifdef DEBUG
cout << "============================" << endl;
cout << "Program run for " << (clock() - now) / (double)CLOCKS_PER_SEC * 1000 << " ms." << endl;
#endif
return 0;
}
标签:le,return,HDU6397,int,res,LL,Encoding,Character,const 来源: https://www.cnblogs.com/JYF-AC/p/16558970.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。