zoukankan      html  css  js  c++  java
  • uva 11488 Hyper Prefix Sets(狂水)

    题意:

    获得集合中最长前缀长度*有该前缀个数的最大值


    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.
    SampleInput
    4
    4
    0000
    0001
    10101
    010
    2
    01010010101010101010
    11010010101010101010
    3
    010101010101000010001010
    010101010101000010001000
    010101010101000010001010
    5
    01010101010100001010010010100101
    01010101010100001010011010101010
    00001010101010110101
    0001010101011010101
    00010101010101001
    SampleOutput
    6
    20
    66

    44


    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int sum;
    char str[205];
    struct Trie
    {
        int cnt;
        Trie *next[5];
        Trie()
        {
            cnt=0;
            memset(next,NULL,sizeof(next));
        }
    };
    
    void Insert(Trie *p,char ch[],int len)
    {
        for(int i=0;i<strlen(ch);i++)
        {
            p->cnt++;
            sum = max(sum,p->cnt*i);
            if(p->next[ ch[i]-'0' ]==NULL)
                p->next[ ch[i]-'0']=new Trie;
            p = p->next[ch[i]-'0'];
        }
        p->cnt++;
        sum = max(sum,p->cnt*(int)strlen(ch));
    }
    int main()
    {
        int T,n;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            Trie *root=new Trie;
            sum=0;
            while(n--)
            {
                scanf("%s",str);
                Insert(root,str,0);
            }
            printf("%d
    ",sum);
        }
        return 0;
    }



  • 相关阅读:
    网站访问量大 怎样优化mysql数据库
    BootStrap 模态框禁用空白处点击关闭
    常用SQL语句
    诅咒JavaScript之----ArcGIS JavaScript 点聚合 ClusterLayer
    模态框与 天地图地图控件冲突
    FXK Javascript
    从列表中或数组中随机抽取固定数量的元素组成新的数组或列表
    wangEditor
    手把手教你用vue-cli构建一个简单的路由应用
    解决eclipse端口被占用的问题
  • 原文地址:https://www.cnblogs.com/zswbky/p/5431914.html
Copyright © 2011-2022 走看看