比赛 寒假集训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;
}