CDOJ 数据结构训练 J

来源:互联网 发布:钢铁侠反应堆淘宝 编辑:程序博客网 时间:2024/06/05 15:46
#include <map>#include <set>#include <list>#include <cmath>#include<cctype>#include <ctime>#include <deque>#include <stack>#include <queue>#include <cstdio>#include <string>#include <vector>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define PI 3.1415926535897932626using namespace std;int gcd(int a, int b){return a % b == 0 ? b : gcd(b, a % b);}typedef struct node{    int value;//当前长度    int num;//当前字符的个数    struct node* child[2];}Node;LL max1;Node * root;Node * addnew(){    Node *p=(Node*)malloc(sizeof(Node));    p->num=0;    p->value=0;    p->child[0]=p->child[1]=NULL;    return p;}void insert(char *str1){    int n,i,w;    n=strlen(str1);    Node *p=root;    for (i=0;i<n;i++)    {        w=str1[i]-'0';        if (p->child[w]==NULL)        {            p->child[w]=addnew();            p->child[w]->value=i+1;            p->child[w]->num++;        }        else        {            p->child[w]->num++;        }        p=p->child[w];    }}void slove(Node * p){    if (p==NULL) return ;    if (p->num * p->value>max1)    max1=p->num*p->value;    for (int i=0;i<2;i++)    slove(p->child[i]);    return ;}void destroy(Node *p){    for (int i=0;i<2;i++)    {        destroy(p->child[i]);        free(p->child[i]);    }}int main(){    long N;char input[210];    root=(Node*)malloc(sizeof(Node));    while (scanf("%ld",&N)==1)    {        root->child[0]=root->child[1]=NULL;        root->num=root->value=0;        for (int i=0;i<N;i++)        {            scanf("%s",input);            insert(input);        }        max1=0;        slove(root);        printf("%lld\n",max1);    }    return 0;}

0 0
原创粉丝点击