程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 字符串Hash的應用

字符串Hash的應用

編輯:C++入門知識

題意:輸入一堆數字 看一堆數中最少有多少個上升子串(不連續的子串) 1個數字單獨也算一個子串。

[cpp] #include <iostream>  
#include <stdio.h>  
#include <string.h>  
 
using namespace std; 
const int N = 7003; 
 
int ELFhash(char *key) 

    unsigned long long h=0; 
    unsigned long long g; 
    while(*key) 
    { 
        h=(h<<4)+*key++; 
        g=h&0xf0000000LL; 
        if(g) h^=g>>24; 
        h&=~g; 
    } 
    return h; 

 
int hash[N],count[N]; 
int maxval,n; 
 
void hashhit(char *str) 

    int k,t; 
    while(*str=='0') str++; 
    k=ELFhash(str); 
    t=k%N; 
    while(hash[t]!=k&&hash[t]!=-1) 
        t=(t+10)%N; 
    if(hash[t]==-1) count[t]=1,hash[t]=k; 
    else if(++count[t]>maxval) maxval=count[t]; 

 
int main() 

    char str[105]; 
    while(cin>>n) 
    { 
        memset(hash,-1,sizeof(hash)); 
        maxval=1; 
        while(n--) 
        { 
            cin>>str; 
            hashhit(str); 
        } 
        cout<<maxval<<endl; 
    } 
    return 0; 

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;
const int N = 7003;

int ELFhash(char *key)
{
    unsigned long long h=0;
    unsigned long long g;
    while(*key)
    {
        h=(h<<4)+*key++;
        g=h&0xf0000000LL;
        if(g) h^=g>>24;
        h&=~g;
    }
    return h;
}

int hash[N],count[N];
int maxval,n;

void hashhit(char *str)
{
    int k,t;
    while(*str=='0') str++;
    k=ELFhash(str);
    t=k%N;
    while(hash[t]!=k&&hash[t]!=-1)
        t=(t+10)%N;
    if(hash[t]==-1) count[t]=1,hash[t]=k;
    else if(++count[t]>maxval) maxval=count[t];
}

int main()
{
    char str[105];
    while(cin>>n)
    {
        memset(hash,-1,sizeof(hash));
        maxval=1;
        while(n--)
        {
            cin>>str;
            hashhit(str);
        }
        cout<<maxval<<endl;
    }
    return 0;
}
 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved