字典树水题。。。。。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
using namespace std;
#define rep(i,s,t) for(int i=s;i<t;i++)
#define N 500000
struct node{
int next[2],num,len;
void init(){
memset(next,-1,sizeof(next));
num=len=0;
}
}root[N];
int tot,t,n,ans;
char s[210];
inline void insert(char *s){
int p=0,id,l=strlen(s);
rep(i,0,l){
id=s[i]-'0';
if(root[p].next[id]==-1){
root[p].next[id]=tot;
root[tot].init();
root[tot++].len=root[p].len+1;
}
p=root[p].next[id];
root[p].num++;
}
}
inline void query(){
queue<int>q;
q.push(0);
while(!q.empty()){
int x=q.front();
q.pop();
ans=max(root[x].num*root[x].len,ans);
rep(i,0,2){
if(root[x].next[i]!=-1){
q.push(root[x].next[i]);
}
}
}
}
int main(){
scanf("%d",&t);
rep(ca,0,t){
scanf("%d",&n);
tot=0;
root[tot++].init();
rep(i,0,n){
scanf("%s",s);insert(s);
}
ans=0;
query();
printf("%d\n",ans);
}
return 0;
}