2017-07-28 16:12:51

writer:pprp

题目简单描述:

第一行,N代表单词库中有N个单词,随后是N行单词,紧接着M代表待查单词数目,随后是M行待查单词

输出:拼写单词错误的单词数目

算法:用到了哈希表进行快速查找


 

代码如下:

#include <iostream>
#include <string>

using namespace std;
const int maxn = 112337;
int total;
string h[maxn+1];

int Hash(string x)
{
    int l = x.length();
    int m = l/2;
    int t = (x[0]-65)*10000+(x[m]-65)*100+x[l-1]-65;   //取值方法
    return t%maxn;
}

void Insert(string x)
{
    int t = Hash(x);
    while(h[t]!=""&&h[t]!=x)
    {
        t++;
        if(t==maxn)
            t=0;
    }
    h[t]=x;
}

void Find(string x)
{
      int t = Hash(x);
      while(h[t]!=""&&h[t]!=x)
      {
            t++;
            if(t==maxn)
                  t=0;
      }
      if(h[t]=="")
            total++;
}


int main()
{
    int i,n,m;
    string tmp;
    cin >> n;          //输入到单词库中的单词数目
    for(i=1;i<=n;i++)
    {
          cin >>tmp;
          Insert(tmp);
    }
    cin >> m;          //待查单词数目
    for(i=1;i<=m;i++)
    {
          cin >> tmp;
          Find(tmp);
    }
    cout << total;
    
    return 0;
}

 

代码改变世界