第一次省赛草草结束····留下了无数的遗憾···这在省赛卡到的题目···因为自己比较紧张 把 ‘a’ 打成了 ‘A’ 导致 第一个输入的总是对的 第二次 一样的数据也会错····一直以为是初始化问题···认为指针混乱···总之留下了无数的遗憾···真心对不起自己的队友···下面贴代码····
#include<iostream>
#include<stdio.h>
using namespace std;
struct Node
{
int level;
int match;
Node * Child[26];
}node[1000010];
int rear;
char str[1000010];
void Clear(int j)
{
for(int i = 0;i<26;i++)
node[j].Child[i] = NULL;
node[j].match = 0;
}
void Add(int i)
{
Node * p = node;
while(str[i]!='\0')
{
//printf("%d match :%d\n",p -> level,p -> match);
if ( p->Child[ str[i] - 'a' ] == NULL )
{
Clear(rear);
node[rear].level = i + 1;
p -> Child[ str[i] - 'a' ] = &node[rear++];
}
p = p -> Child[ str[i] - 'a' ];
p -> match ++;
i++;
}
}
int dfs(Node * p)
{
if( p -> match == 1 ) return p -> level;
int ans = 0;
for ( int i = 0;i < 26;i++)
if( p -> Child[i] != NULL )
ans += dfs( p -> Child[i] );
return ans;
}
int main()
{
int t,n;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
Clear( 0 );
rear = 1;
node[0].level = 0;
for (int i = 0;i<n;i++)
{
scanf("%s",str);
Add(0);
}
printf("%d\n",dfs(&node[0]));
}
}