• 湖南省第八届大学生计算机程序设计竞赛1115: 最短的名字(模拟)


    1115: 最短的名字
    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 739  Solved: 292
    [Submit][Status][Web Board]
    Description
    在一个奇怪的村子中,很多人的名字都很长,比如aaaaa, bbb and abababab。
    名字这么长,叫全名显然起来很不方便。所以村民之间一般只叫名字的前缀。比如叫'aaaaa'的时候可以只叫'aaa',因为没有第二个人名字的前三个字母是'aaa'。不过你不能叫'a',因为有两个人的名字都以'a'开头。村里的人都很聪明,他们总是用最短的称呼叫人。输入保证村里不会有一个人的名字是另外一个人名字的前缀(作为推论,任意两个人的名字都不会相同)。
    如果村里的某个人要叫所有人的名字(包括他自己),他一共会说多少个字母?
    Input
    输入第一行为数据组数T (T<=10)。每组数据第一行为一个整数n(1<=n<=1000),即村里的人数。以下n行每行为一个人的名字(仅有小写字母组成)。输入保证一个村里所有人名字的长度之和不超过1,000,000。
    Output

    对于每组数据,输出所有人名字的字母总数。


    Sample Input
    1
    3
    aaaaa
    bbb
    abababab
    

    Sample Output
    5
    

    HINT

     


    Source

    湖南省第八届大学生计算机程序设计竞赛

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    using namespace std;
    string ch[1005];
    int sum;
    int main()
    {
        int t,n;
        int k;
        scanf("%d",&t);
        while(t--)
        {
            sum=0;
            cin>>n;
           for(int i=0;i<n;i++)
        {
            cin>>ch[i];
        }
        for(int i=0;i<n;i++)
        {
            k=1;
            for(int j=0;j<n;)
            {
                if(i!=j&&ch[i].substr(0,k)==ch[j].substr(0,k))
                        k++;
                else
                        j++;
            }
               sum+=k;
        }
    cout<<sum<<endl;
        }


        return 0;
    }

  • 相关阅读:
    [BJOI2019] 光线
    C# 从零开始写 SharpDx 应用 笔刷
    BAT 脚本判断当前系统是 x86 还是 x64 系统
    BAT 脚本判断当前系统是 x86 还是 x64 系统
    win2d 通过 CanvasActiveLayer 画出透明度和裁剪
    win2d 通过 CanvasActiveLayer 画出透明度和裁剪
    PowerShell 拿到显卡信息
    PowerShell 拿到显卡信息
    win10 uwp 如何使用DataTemplate
    win10 uwp 如何使用DataTemplate
  • 原文地址:https://www.cnblogs.com/dshn/p/4750637.html
Copyright © 2020-2023  润新知