| 比赛 |
寒假集训4 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
bitset(位集) |
最终得分 |
100 |
| 用户昵称 |
exil |
运行时间 |
1.938 s |
| 代码语言 |
C++ |
内存使用 |
26.79 MiB |
| 提交时间 |
2026-02-28 11:30:06 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
freopen("bitset.in","r",stdin);
freopen("bitset.out","w",stdout);
int n,m;
scanf("%lld%lld",&n,&m);
int f[n+2][m+2];
for(int i = 1;i<=m;++i)f[0][i]=0;
string shang;
for(int i = 1;i<=n;++i){
string r;
cin>>r;
for(int j = 0;j<m;++j){
if(i==1)f[i][j+1]=1;
else{
if(r[j]==shang[j]){
f[i][j+1]=f[i-1][j+1]+1;
}
else f[i][j+1]=1;
}
}
shang=r;
}
for(int i = 1;i<=n;i++)sort(f[i]+1,f[i]+1+m);
int k,x,y,z,ans=0;
scanf("%lld",&k);
scanf("%lld%lld%lld",&x,&y,&z);
int a=1,b=n;
for(int i = 1;i<=k;i++){
int l=min(a,b),r=max(a,b);
int li=1,ri=m,wei=m+1;
int len=r-l+1;
while(li<=ri){
int mid=(li+ri)/2;
if(f[r][mid]>=len){
wei=mid;
ri=mid-1;
}
else{
li=mid+1;
}
}
ans+=m-wei+1;
//cout<<m-wei+1<<" "<<l<<" "<<r<<endl;
int qian=m-wei+1;
a=(a*x+qian*y+z)%n+1;
b=(b*y+qian*z+x)%n+1;
}
cout<<ans;
return 0;
}