蓝桥杯_字符串统计_进制哈希

蓝桥杯_字符串统计_进制哈希

//
#include<bits/stdc++.h>
using namespace std;

typedef unsigned long long ULL;
const int N=11111;
set<ULL> st;

ULL BKDRhash( const string& s )
{
    ULL r=131,ans,i;                // r进制 ans哈希值
    for( ans=i=0;i<s.size();i++ )
    {                               // 进制 > 最大单值
        ans=ans*r+( s[i]-'a' );     // +1 也行 // ans=ans*r+s[i];
    }
    return ans;                     // 自动 ans % 2^64
}
// 进制 r: 31 + 131 13131 + 1313 131313

int main()
{
    string s;
    int n;

    while( cin>>n )
    {
        st.clear();
        while( n-- ) { cin>>s; st.insert( BKDRhash(s) ); }
        cout<<st.size()<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/125304949
今日推荐