深夜切题——PKKJ的生日礼物

10693 PKKJ的生日礼物

时间限制:1000MS  内存限制:65535K

Description

    写下这题目的时间是11.24,美国时间也是11.24,以此题祝远在美帝的PKKJ彭教主生日快乐。
    生日嘛,自然少不了生日礼物的啦。这天彭教主收到来自中国的一份神秘的生日礼物(传说中是个漂亮的MM o(∩_∩)o 哈哈)。可是礼物却被一个密码锁锁了
起来(pkkj大叫一声:坑爹啊,哪个家伙这么缺德~-_-b)。在礼物箱上还附着一张纸条:嘿嘿~想知道密码吗?那就把下面的题目解出来,答案就是密码啦!
    对于一个字符串,定义它的前缀就是指字符串的任意首部。例如字符串abc的前缀有空串,a,ab,abc。
    对于一个字符串集合,如果集合中任一个元素都不是其他元素的前缀的话,我们称之为完美非前缀集合。举个例子:{”happy”, “birthday”, “to”, 
“pkkj”}就是一个完美非前缀集合,而{“happy”, “hat”, “h”}就不是完美非前缀集合。
    现在问题来了,给你一个字符串集合,你要找出一个该集合的子集,使得该子集是一个完美非前缀集合,且包含最多的元素。问你这个完美非前缀子集最多包含
多少个元素?
    由于彭教主一心只想着礼物里面的神秘MM,正所谓一心不能二用,所以他想让你帮他来解决这个难题。

输入格式

    第一行只有一个正整数T,表示题目共有T组数据
    对于每组数据,输入一个整数n ( 0< n <= 50 ),
    接下来有n行,每行输入一个字符串,字符串由小写字母(’a’~’z’)组成,且长度不超过50.

输出格式

    对于每组数据每行输出一个整数,代表一个完美非前缀子集最多包含多少个元素。

输入样例

2
4
happy
birthday
to
pkkj
4
happy
hat
h
ha

输出样例

4
2


提示

对于第一组数据:该集合本身就是一个完美非前缀集合,所以包含最多元素的完美非前缀子集就是它本身,一共有4个元素
对于第二组数据,{”happy”,”hat”}是其中一个的包含最多元素的完美非前缀子集,其元素个数为2

作者 scau_acm




对string[]进行字典序排序,for判断string[i]是否包含于string[i+1]中,不包含就将string[i]加入完美非前缀集合,string[n-1]一定在完美非前缀集合中

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;

//#define local
int main()
{
#ifdef local
    freopen("input.txt","r",stdin);
#endif
    int T,n;
    cin>>T;
    cin.tie(0);
    while(T--){
        cin>>n;
        int ct=1;
        string s[n];
        for(int i=0;i<n;++i)
            cin>>s[i];
        sort(s,s+n);
        for(int i=0;i<n-1;++i){
            string::size_type idx;
            idx=s[i+1].find(s[i]);
            if(idx==0)continue;
            else ++ct;
        }
        cout<<ct<<endl;
    }
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值