zoukankan      html  css  js  c++  java
  • bzoj3555 企鹅QQ

      题目意思就是找相似的字符串,然后相似的定义就是2个字符串仅在同一个位置不同,只需要枚举砍掉1到len的每个位置的情况就行了

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    
    using  namespace std;
    #define ull unsigned long long
    ull ihash[30005]={0},a[30005],base=1331,pow[205],ans,tmp;//base表示进制,取一个比字符串里出现的最大的字符ascii码值大就行了
    char s[30005][205];
    int main()
    {
        int n,len,mmp;
        scanf("%d %d %d",&n,&len,&mmp);
        pow[0]=1;
        for(int i=1;i<=205;i++)
            pow[i]=pow[i-1]*base;
        for(int i=1;i<=n;i++)
        {
            scanf(" %s",s[i]+1);
            for(int j=1;j<=len;j++)
                ihash[i]=ihash[i]*base+s[i][j];
    
        }
        ans=0;
        for(int i=1;i<=len;i++)
        {
            for(int j=1;j<=n;j++)
            {
                a[j]=ihash[j]-s[j][i]*pow[len-i];
            }
            sort(a+1,a+n+1);
            tmp=1;
            for(int i=2;i<=n;i++)//个人感觉这个数出相同的数组成数对的个数很有技巧
            {
                if(a[i]==a[i-1])
                {
                    ans+=tmp;
                    tmp++;
                }
                else
                    tmp=1;
            }
    
        }
        cout<<ans<<endl;
    
    }
    
  • 相关阅读:
    Python安装appium 遇见的报错
    appium
    QQ邮箱/微信邮箱发送邮件
    Python-变量
    神秘的咒语
    宿命的PSS
    E. Congruence Equation
    D. Substring
    leetcode 761. Special Binary String
    F
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754981.html
Copyright © 2011-2022 走看看