#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.1415926535897932626
using 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;
}
CDOJ 数据结构训练 J
最新推荐文章于 2024-08-09 19:02:56 发布