zoukankan      html  css  js  c++  java
  • bzoj_3555: [Ctsc2014]企鹅QQ

    手动哈希

    前缀和

    比较字符串是否相同

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    #define ri register int
    #define u unsigned long long
    #define NN 30005
    #define LL 205
    
    using std::string;
    using std::cout;
    using std::endl;
    using std::cin;
    
    namespace mainstay {
    
        string s[NN];
    
        const u bas=87;
    
        u N,L,K,cnt,ans(0),t[NN],sum[NN][LL],val[NN]= {(u)1};
    
        inline void solve() {
            cin>>N>>L>>K;
            for(ri i(1); i<=N; ++i) cin>>s[i],s[i]='#'+s[i];
            for(ri i(1); i<=L; ++i) val[i]=bas*val[i-1];
            for(ri i(1); i<=N; ++i) {
                for(ri j(1); j<=L; ++j) {
                    sum[i][j]=sum[i][j-1]+(s[i][j]-'0'+1)*val[j];
                }
            }
            for(u j(1); j<=L; ++j) {
                for(u i(1); i<=N; ++i) t[i]=sum[i][L]-(s[i][j]-'0'+1)*val[j];
                std::sort(t+1,t+N+1),cnt=1;
                for(ri i(2); i<=N+1; ++i) {
                    if(t[i]==t[i-1]) ++cnt;
                    else ans+=(cnt*(cnt-1)>>1),cnt=1;
                }
                if(cnt>1) ans+=(cnt*(cnt-1)>>1);
            }
            cout<<ans;
        }
    
    }
    
    int main() {
    
        //freopen("3555.in","r",stdin);
        //freopen("3555.out","w",stdout);
        std::ios::sync_with_stdio(false);
        mainstay::solve();
    
    }
  • 相关阅读:
    ruby学习总结03
    ruby学习总结02
    ruby学习总结01
    mongodb学习笔记
    mongodb数据库设计原则
    activiti学习总结
    Scala学习——隐式转换
    Scala学习——函数高级操作
    Scala学习——模式匹配
    Scala学习——集合
  • 原文地址:https://www.cnblogs.com/ling-zhi/p/11804705.html
Copyright © 2011-2022 走看看