HDU-1251 统计难题

来源:互联网 发布:怎样升级淘宝新版本 编辑:程序博客网 时间:2024/05/16 08:24

考查Trie树,用G++提交会超内存,原因不详,C++提交AC

// Tire树// 用G++提交会超内存,具体原因不详// 用C++提交AC#include <cstdio>#include <string>#include <cstdlib>#include <iostream>#include <string.h>using namespace std;typedef struct node {    struct node* next[26];    int num;    bool isLeaf;    node() {        for( int i = 0; i < 26; i++ ) {            next[i] = NULL;        }        num = 0;        isLeaf = true;    }} Node;int Max = 0;Node* createTrie() {    Node* root = ( Node* )malloc( sizeof( Node ) );    for( int i = 0; i < 26; i++ ) {        root->next[i] = NULL;    }    root->num = 0;    root->isLeaf = true;    return root;}void insert( Node* root, char str[] ) {    Node* r = root;    for( int i = 0; i < strlen( str ); i++ ) {        if( r->next[str[i] - 'a'] == NULL ) {            Node* p = createTrie();            //r->next[str[i] - 'a'] = new Node;            r->next[str[i] - 'a'] = p;            r->isLeaf = false;        }        r = r->next[str[i] - 'a'];        r->num++;    }    r->isLeaf = true;}int find( Node* root, char str[] ) {    Node* r = root;    for( int i = 0; i < strlen( str ); i++ ) {        if( r->next[str[i] - 'a'] == NULL ) return 0;        r = r->next[str[i] - 'a'];    }    return r->num;}void deleteTrie( Node* root ) {    for( int i = 0; i < 26; i++ ) {         if( root->next[i] ) {             deleteTrie( root->next[i] );         }     }     free( root );}int main() {    Node* root = createTrie();    //Node* root = new Node;    char str[15];    while( gets( str ) ) {        if( strlen( str ) == 0 ) break;        insert( root, str );    }    while( gets( str ) ) {        printf( "%d\n", find( root, str ) );    }    deleteTrie( root );    return 0;}


0 0
原创粉丝点击