Pagini recente » Cod sursa (job #537923) | Cod sursa (job #1101172) | Cod sursa (job #1375539) | Cod sursa (job #1502159) | Cod sursa (job #960756)
Cod sursa(job #960756)
#include <fstream>
using namespace std;
struct THashNode;
typedef THashNode *PHashNode;
struct THashNode
{
long long Num;
PHashNode Next;
};
PHashNode MakeHashNode(long long x,PHashNode Next)
{
PHashNode r = new THashNode();
r->Num = x;
r->Next = Next;
return r;
}
#define Hash_Prime 30031
//510511
PHashNode HashTable[Hash_Prime];
char Data[13000005];
long ReadPos;
long Len = 0;
long SearchDict(long long x)
{
long long p = x % Hash_Prime;
PHashNode HN = HashTable[p];
while (HN != 0)
{
if (HN->Num == x)
{
return 1;
}
HN = HN->Next;
}
return 0;
}
void ReadInput(void)
{
FILE *FIN = fopen("abc2.in","rt");
fseek(FIN,0,SEEK_END);
long SS = ftell(FIN);
fseek(FIN,0,SEEK_SET);
fread(Data,1,SS,FIN);
fclose(FIN);
}
void ReadStrings(void)//fstream &fin)
{
char *D = &Data[ReadPos];
while (D[0] != 0)
{
long long z = 0;
long long p;
long a;
for (a = 0;D[0] != '\n';a += 1)
{
z = (z * 3) + (D[0] - 'a');
D += 1;
}
Len = a;
D += 1;
if (SearchDict(z) == 0)
{
p = z % Hash_Prime;
HashTable[p] = MakeHashNode(z,HashTable[p]);
}
}
}
int main(void)
{
//fstream fin("abc2.in",ios::in);
fstream fout("abc2.out",ios::out);
ReadInput();
while (Data[ReadPos] != '\n')
{
ReadPos += 1;
}
Data[ReadPos] = 0;
ReadPos += 1;
// fin >> Data;
ReadStrings();//fin);
long Count = 0;
long long Val = 0;
long long Mod = 1;
for (long a = 0;a < Len - 1;a += 1)
{
Val = (Val * 3) + (Data[a] - 'a');
Mod *= 3;
}
for (long a = Len - 1;Data[a] != 0;a += 1)
{
Val = ((Val % Mod) * 3) + (Data[a] - 'a');
Count += SearchDict(Val);
}
fout << Count;
//fin.close();
fout.close();
return 0;
}