UVA11488——Hyper Prefix Sets(字典树,最长前缀)
2015-11-05 19:48
483 查看
Prefix goodness of a set string is length of longest common prefix*number of strings in the set. For
example the prefix goodness of the set {000,001,0011} is 6.You are given a set of binary strings. Find
the maximum prefix goodness among all possible subsets of these binary strings.
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 strings. Each of the next n lines contains a string containing only ‘0’ and ‘1’.
Maximum length of each of these string is 200.
Output
For each test case output the maximum prefix goodness among all possible subsets of n binary strings.
Sample Input
4
4
0000
0001
10101
010
2
01010010101010101010
11010010101010101010
3
010101010101000010001010
010101010101000010001000
010101010101000010001010
5
01010101010100001010010010100101
01010101010100001010011010101010
00001010101010110101
0001010101011010101
00010101010101001
Sample Output
6
20
66
44
求最长公共前缀,第一个例子中,最长公共前缀是000,有两个这样的序列,所以是3*2=6
第二个例子中,最长公共前缀是0,所以可以把自己本身作为前缀,前缀的长度就是自己本身的长度,所以是20*1=20
用结构体数组实现字典树,child[0]表示该点之后有个0,里面存放的是这个0的位置
example the prefix goodness of the set {000,001,0011} is 6.You are given a set of binary strings. Find
the maximum prefix goodness among all possible subsets of these binary strings.
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 strings. Each of the next n lines contains a string containing only ‘0’ and ‘1’.
Maximum length of each of these string is 200.
Output
For each test case output the maximum prefix goodness among all possible subsets of n binary strings.
Sample Input
4
4
0000
0001
10101
010
2
01010010101010101010
11010010101010101010
3
010101010101000010001010
010101010101000010001000
010101010101000010001010
5
01010101010100001010010010100101
01010101010100001010011010101010
00001010101010110101
0001010101011010101
00010101010101001
Sample Output
6
20
66
44
求最长公共前缀,第一个例子中,最长公共前缀是000,有两个这样的序列,所以是3*2=6
第二个例子中,最长公共前缀是0,所以可以把自己本身作为前缀,前缀的长度就是自己本身的长度,所以是20*1=20
用结构体数组实现字典树,child[0]表示该点之后有个0,里面存放的是这个0的位置
#include <iostream> #include <cstring> #include <cstdio> #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 [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<sn;++i) { num=s[i]-'0'; if(tr[x].child[num]==-1) tr[x].child[num]=++nn; x=tr[x].child[num]; tr[x].shownum++; ant=max(ant,(i+1)*tr[x].shownum); } } void read() { for(int i=0;i<n;++i) { scanf("%s",str[i]); inset(str[i]); } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d",&n); nn=0; ant=0; init(); read(); printf("%d\n",ant); } return 0; }
相关文章推荐
- centos系统下vnc一个bug
- mysql版本 5.6.10,UNIX_TIMESTAMP和FROM_UNIXTIME支持最大时间戳转换
- 进制转换
- DataFrame注意问题
- 1104冒泡排序语法树
- CDS 将工程中的模块打包成库(即**.o文件)的过程
- iOS中常用的四种数据持久化方法简介
- sublime text配置滚动超过页尾
- Mahout-DistanceMeasure (数据点间的距离计算方法)
- C# 委托及各种写法
- 1105冒泡排序语法树
- 学习笔记-二分图匹配(匈牙利算法)
- Android基础入门教程——2.3.1 TextView(文本框)详解
- 学习笔记-二分图匹配(匈牙利算法)
- 【大渣】最长上升公共子序列
- linux下创建带密码的用户
- Android基础入门教程——2.2.6 AbsoluteLayout(绝对布局)
- 利用EEPROM实现arduino的断电存储
- JavaScript学习总结(五)原型和原型链详解
- View学习总结