WA了无数次因为什么呢,找到一个之后还一直再找。没有认真去写代码也没认真思考
自己太次了,这样可不行
#include <iostream>
#include <string.h>#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
#define mod 100007
#define N 100010
struct node
{
char vab[100];
int next;
};
node hashnode[N];
int head[N], cnt;
vector<string> list;
void init()
{
memset(head, -1, sizeof(head));
cnt = 0;
list.clear();
}
int gethash( char *str)
{
unsigned res = 0;
int seed = 131;
while(*str)
res = res * seed + *str++;
return (res & 0x7fffff) % mod;
}
void insert( char *str)
{
int h = gethash(str);
strcpy(hashnode[cnt].vab, str);
hashnode[cnt].next = head[h];
head[h] = cnt++;
}
bool search(char *str)
{
int h = gethash(str);
for( int i = head[h]; i != -1; i = hashnode[i].next)
{
if(strcmp(str, hashnode[i].vab) == 0)
return true;
}
return false;
}
int main()
{
char str[100];
init();
while( scanf("%s",str)!= EOF)
{
insert(str);
if(str[0] == 'E')
break;
list.push_back(str);
}
sort(list.begin(), list.end());
for( int i = 0; i < list.size(); i++)
{
int len = list[i].length();
char fro[100];
char aft[100];
for( int j = 1; j < len; j++)
{
int l, k;
for( k = 0; k < j; k++)
fro[k] = list[i][k];
fro[k] = '\0';
for( l = 0; len - l - 1 >= 0; l++)
aft[l] = list[i][k+l];
aft[l] = '\0';
//cout<<fro<<"--------------->"<<aft<<endl;
if(search(fro) && search(aft))
{
cout<<list[i]<<endl;
break;
}
}
}
}