UVA 11488——Hyper Prefix Sets(辞書ツリー、最長プレフィックス)
1941 ワード
PreePr exgoodnes of a set streing is length of longest common pre x x*number of stinininininins.For example the pre e e e e x goodnes of the set{000,001,0011}isYou the the inininininininininininininininininininininininininininininininininininininininininininininins.fos.fos.fos.fos.fos.fos.fos s s.fos.fos s.For eedededededededededededestststststststininininininininininrytrings.
Input First line of the input contains T(≦20)the number of test cases.Each of the test cases start with n(≦50000)the number of stings.Each of the next n lineas s streing containing containing containing only'0 and the.Maxis.stres.stres.stres.stres.
Output For each test case output the maximum pre x goodnes among all possible subsets of n binary strigs.
Sample Input 4 0000 0001 10101 010 2 010101010101010101010110 11010001010101010101010101010101010101010 101010101010 101010101010101010 1010101 01010101010 1010101 0101010101 010101010101010101010 1010101010101010101 0101010101010101
Sample Output 6 20 66 44
最長の共通プレフィックスを求めて、最初の例では、最長の共通プレフィックスは000で、2つのこのようなシーケンスがあります.だから、3*2=6です.
第二の例では、最長の共通プレフィクスは0であるので、自分自身をプレフィクスとしてもよく、プレフィクスの長さは自分自身の長さであるため、20*1=20である.
構造体配列で辞書ツリーを実現します.child[0]はこの点の後に0があります.中にはこの0の位置が保存されています.
Input First line of the input contains T(≦20)the number of test cases.Each of the test cases start with n(≦50000)the number of stings.Each of the next n lineas s streing containing containing containing only'0 and the.Maxis.stres.stres.stres.stres.
Output For each test case output the maximum pre x goodnes among all possible subsets of n binary strigs.
Sample Input 4 0000 0001 10101 010 2 010101010101010101010110 11010001010101010101010101010101010101010 101010101010 101010101010101010 1010101 01010101010 1010101 0101010101 010101010101010101010 1010101010101010101 0101010101010101
Sample Output 6 20 66 44
最長の共通プレフィックスを求めて、最初の例では、最長の共通プレフィックスは000で、2つのこのようなシーケンスがあります.だから、3*2=6です.
第二の例では、最長の共通プレフィクスは0であるので、自分自身をプレフィクスとしてもよく、プレフィクスの長さは自分自身の長さであるため、20*1=20である.
構造体配列で辞書ツリーを実現します.child[0]はこの点の後に0があります.中にはこの0の位置が保存されています.
#include
#include
#include
#define N 50010
#define M 210
using namespace std;
struct trie
{
int child[2],shownum;
void init()
{
shownum=0;
memset(child,-1,sizeof(child));
}
};
int n,nn,ant;
char str[N][M];
trie tr[10*N];
void init()
{
for(int i=0;i<10*N;++i)
tr[i].init();
}
void inset(char s[])
{
int x=0,sn=strlen(s),num;
for(int i=0;i