UVA 11488,Hyper Prefix Sets,Trie树
来源:互联网 发布:电话轰炸软件下载 编辑:程序博客网 时间:2024/05/16 04:42
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 stringis 200.
Output
For each test case output the maximum prefix goodness among all possible subsets of n binary strings.
Sample Input Output for Sample Input
4
4
0000
0001
10101
010
2
01010010101010101010
11010010101010101010
3
010101010101000010001010
010101010101000010001000
010101010101000010001010
5
01010101010100001010010010100101
01010101010100001010011010101010
00001010101010110101
0001010101011010101
00010101010101001
6
20
66
44
题意:给定一个字符串集合S,定义P(S)为所有字符串的公共前缀长度与S中字符串个数的乘积,比如P({000,001,0011}) = 6.给N个01串,从中选出一个集合S,使得P(S)最大。
思路:将所有字符串构建trie图。每跑一个点,都要计数~同时该点的计数*目前跑的长度。不断更新这个积的最大值。就是答案。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define maxn 1000080char str[208];inline int max(int a,int b){return a>b?a:b;}struct Trie{int ch[maxn][2];int val[maxn];int sz;void init(){sz = 1;memset(ch[0],0,sizeof(ch[0]));}int idx(char c){return c - '0';}int insert(char * s){int ans = 0;int u = 0,len = strlen(s);for(int i = 0;i < len;i++){int c = idx(s[i]);if(!ch[u][c]){memset(ch[sz],0,sizeof(ch[sz]));val[sz] = 0;ch[u][c] = sz++;}u = ch[u][c];val[u]++;ans = max(ans,val[u]*(i+1));}return ans;}}trie;int main(){//freopen("in.txt","r",stdin);int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);trie.init();int ans = 0;for(int i = 1;i <= n;i++){scanf("%s",str);ans = max(ans,trie.insert(str));}printf("%d\n",ans);}return 0;}
- UVA 11488,Hyper Prefix Sets,Trie树
- Hyper Prefix Sets - UVa 11488 Trie树
- uva 11488 - Hyper Prefix Sets(Trie)
- UVA 11488 Hyper Prefix Sets(Trie)
- UVA 11488 - Hyper Prefix Sets(Trie)
- UVa 11488 - Hyper Prefix Sets (Trie)
- UVA 11488 Hyper Prefix Sets (Trie)
- UVA - 11488 - Hyper Prefix Sets(Trie 应用)
- UVA 11488 Hyper Prefix Sets Trie树求最值
- UVA 11488(Hyper Prefix Sets-Trie统计)
- UVA 11488-Hyper Prefix Sets(trie树+DFS)
- UVA 11488 Hyper Prefix Sets(trie的应用)
- UVa 11148 Hyper Prefix Sets (Trie)
- uva 11488 - Hyper Prefix Sets(字典树)
- UVA 11488 Hyper Prefix Sets 字典树
- Uva 11488 Hyper Prefix Sets 字典树
- Uva-11488-Hyper Prefix Sets
- UVa:11488 Hyper Prefix Sets
- Cookie&Session
- 关于selenium的一些书籍和资料
- JSP web.xml <jsp-config>标签使用详解
- hive join
- 多态版简单计算器
- UVA 11488,Hyper Prefix Sets,Trie树
- 考研英语复习计划
- ios block语法
- 深入体验JavaWeb开发内幕——EL表达式之一
- JS动态添加输入框
- 生日(扩展)
- java线程详解
- 红外解码 IRCode
- resolve的用法和endpoint浅析