HDU
来源:互联网 发布:路由器mac地质作用 编辑:程序博客网 时间:2024/06/06 14:03
#include <cstdio>#include <string>#include <cstdlib>#include <iostream>#include <string.h>#define MAX 3000 + 10using 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;}