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;}