魔咒词典 HDU - 1880

  感觉这题巨毒瘤,读入字符串方面调了好久才避免了读入空白字符。

  思路就是对每条信息的魔咒和功能的记录在S1和S2串里,并在ihash数组里通过信息的编号(cnt)确定存放的列,将魔咒(魔咒的hash值存在第一行)或功能(功能的hash值存在第2行)的hash值存入。然后输入一个要查找的字符串,就先求出其hash值,然后在去ihash数组里找。

#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define ull unsigned long long
ull ihash[3][100005],base=1331;
char s1[100005][25],s2[100005][85];
int cnt;

ull myhash(char*p)
{
    ull ans=0;
    for(;*p!=0;p++)
     ans=ans*base+*p;
    return ans;
}
int main()
{
    cnt=1;
    while(1)
    {
        scanf(" %s",s1[cnt]);
        if(s1[cnt][0]=='@')
            break;
        int len=strlen(s1[cnt]);
        s1[cnt][len-1]=0;
        ihash[1][cnt]=myhash(s1[cnt]+1);
        //cout<<"1:"<>q;
    getchar();
    char s[100];
    while(q--)
    {
        gets(s);
       // cout<

 

你可能感兴趣的:(hash)