zoukankan      html  css  js  c++  java
  • POJ 3193 字符串排序+比较

    思路:
    1.
    先把那m个排个序 此后每回二分+strncmp一下就好了

    strncmp是个好东西啊……

    2.
    hash判判 (注意 hash会有冲突…………………….)

    //By SiriusRen
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,m,ans;
    struct Node{char a[66];}node[10005],jy;
    bool operator <(Node a,Node b){return strcmp(a.a,b.a)<=0;} 
    int main(){
        scanf("%d%d",&m,&n),getchar();
        for(int i=1;i<=m;i++)gets(node[i].a);
        sort(node+1,node+1+m);
        for(int i=1;i<=n;i++){
            gets(jy.a);
            int l=1,r=m,len=strlen(jy.a);
            while(l<=r){
                int Mid=(l+r)>>1,judge=strncmp(node[Mid].a,jy.a,len);
                if(judge<0)l=Mid+1;
                else if(judge>0)r=Mid-1;
                else {ans++;break;}
            }
        }
        printf("%d
    ",ans);
    }

    这里写图片描述

    //By SiriusRen
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    #define int long long
    int m,n,f[1111][66],mod=1000000007,ans;
    char a[1111][66],s[66];
    signed main(){
        scanf("%lld%lld",&m,&n),getchar();
        for(int i=1;i<=m;i++)gets(a[i]);
        for(int i=1;i<=m;i++){
            int l=strlen(a[i]);
            for(int j=0;j<l;j++){
                f[i][j+1]=(f[i][j]*137+a[i][j])%mod;
            }
        }
        for(int i=1;i<=n;i++){
            gets(s);
            int len=strlen(s),temp=0;
            for(int j=0;j<len;j++)temp=(temp*137+s[j])%mod;
            for(int j=1;j<=m;j++){
                if(temp==f[j][len]){ans++;break;}
            }
        }
        printf("%lld
    ",ans);
    }

    这里写图片描述

  • 相关阅读:
    FTP和SSH的区别
    Hadoop之回收站
    什么是簇?
    linux中环境变量的配置
    windows系统中的系统变量和用户变量,以及配置JDK中各个参数的意义
    linux 中yum和rpm 总结
    ajax请求之async:false/true的作用
    JavaScript eval() 函数的用法
    js模式
    数组的一些操作
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532234.html
Copyright © 2011-2022 走看看