| 记录编号 |
613165 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
bitset(位集) |
最终得分 |
100 |
| 用户昵称 |
dbk |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
1.241 s |
| 提交时间 |
2026-03-01 00:06:07 |
内存使用 |
22.07 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
long long n, m, k, l, r, x, y, z, q, a, b, key, total;
long long ans;
char str[100010];
unordered_map<long long, int>ha;
int main(){
freopen("bitset.in", "r", stdin);
freopen("bitset.out", "w", stdout);
scanf("%lld%lld", &n, &m);
int sum[n + 10][m + 10];
for(int i = 1;i <= m;i++){
sum[0][i] = 0;
}
for(int i = 1;i <= n;i++){
scanf("%s", str);
for(int j = 0;j < m;j++){
sum[i][j + 1] = (str[j] - '0');
sum[i][j + 1] = sum[i - 1][j + 1] + sum[i][j + 1];
}
}
scanf("%lld%lld%lld%lld", &k, &x, &y, &z);
for(int i = 1;i <= k;i++){
if(i == 1){
l = 1, r = n;
a = 1, b = r;
}
else{
l = ((a * x + q * y + z) % n + 1);
r = ((b * y + q * z + x) % n + 1);
a = l, b = r;
}
if(l > r) swap(l, r);
long long key = l * n + r;
if(ha.find(key) != ha.end()){
q = ha[key];
ans += q;
continue ;
}
q = 0;
for(int j = 1;j <= m;j++){
total = sum[r][j] - sum[l - 1][j];
if(( total== r - l + 1) || (total == 0)) q++;
}
ha[key] = q;
ans += q;
}
printf("%lld\n", ans);
}