汉明距离 题解
2025-08-20 09:11:14
发布于:浙江
60阅读
0回复
0点赞
相信ACGO评测机!1秒1e9!!!!
题意解析:请输入文本。
考虑对于每个 ,求出 且 的总方案数。
如果 的第 位为 ,则如果 的前面几位相同,而第 位为 ,显然不论后面的数怎么填, 都小于 。这时,如果汉明距离为 ,则就是后面有 位不同,有 种方案数。然后弄个前缀和就能解决了。
,所以排列组合不需要求逆元,直接手搓杨辉三角 预处理也能解决。
显然,这题的答案不会超过 。所以对 取模的意义是?
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
const int mod = 998244353;
int a[1000005][23];
int C[25][25];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
C[0][0] = 1;
for(int i = 1; i <= 21; i++){
for(int j = 0; j <= i; j++){
C[i][j] = C[i - 1][j];
if(j) C[i][j] += C[i - 1][j - 1];
}
}
for(int i = 1; i <= 1000000; i++){
for(int j = 0; j <= 20; j++){
if(i >> j & 1){
for(int k = 0; k <= 20; k++){
a[i][k] += C[j][k - 1];
}
}
}
for(int j = 1; j <= 20; j++){
a[i][j] += a[i][j - 1];
}
for(int j = 0; j <= 20; j++){
a[i][j] += a[i - 1][j];
}
}
int t;
cin >> t;
while(t--){
int x, y;
cin >> x >> y;
cout << a[x][y] % mod << '\n';
}
return 0;
}
时间复杂度 ,常数小评测机速度快,可以过。
全部评论 2
%%%
2025-08-20 来自 上海
0哦可能是方便求逆元
2025-08-20 来自 浙江
0
有帮助,赞一个