#include <cstdio>
#include <string>
#include <cstdlib>
#include <iostream>
#include <string.h>
#define MAX 3000 + 10
using namespace std;
typedef struct node {
struct node* next[10];
int num;
bool isLeaf;
} Node;
int Max = 0;
Node* createTrie() {
Node* root = ( Node* )malloc( sizeof( Node ) );
for( int i = 0; i < 10; i++ ) {
root->next[i] = NULL;
}
root->num = 0;
root->isLeaf = true;
return root;
}
void insert( Node* root, char str[] ) {
// 去除前导0
int j = 0;
while( str[j] == '0' ) j++;
Node* r = root;
for( int i = j; i < strlen( str ); i++ ) {
if( r->next[str[i] - '0'] == NULL ) {
Node* p = createTrie();
r->isLeaf = false;
r->next[str[i] - '0'] = p;
}
r = r->next[str[i] - '0'];
}
r->isLeaf = true;
r->num++;
//if( r->num > Max ) Max = r->num;
}
int find( Node* root, string str ) {
// 去除前导0
int j = 0;
while( str[j] == '0' ) j++;
Node* r = root;
for( int i = j; i < str.size(); i++ ) {
if( r->next[str[i] - '0'] == NULL ) return 0;
r = r->next[str[i] - '0'];
}
return r->num;
}
void deleteTrie( Node* root ) {
for( int i = 0; i < 10; i++ ) {
if( root->next[i] ) {
deleteTrie( root->next[i] );
}
}
free( root );
}
int main() {
int n;
while( scanf( "%d", &n ) != EOF ) {
Node* root = createTrie();
char str[MAX][35];
Max = -1;
char ch = getchar();
for( int i = 0; i < n; i++ ) {
scanf( "%s", str[i] );
insert( root, str[i] );
}
int Max = -1;
for( int i = 0; i < n; i++ ) {
int cur = find( root, str[i] );
//cout << str[i] << "=" << cur << endl;
if( cur > Max ) Max = cur;
}
printf( "%d\n", Max );
//deleteTrie( root );
}
return 0;
}
HDU - 1800 Flying to the Mars
最新推荐文章于 2020-07-16 23:15:36 发布