HDU5510 Bazinga (strstr())

 

Bazinga

 

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 4919    Accepted Submission(s): 1552

 

 

Problem Description

Ladies and gentlemen, please sit up straight.
Don't tilt your head. I'm serious.


For n given strings S1,S2,⋯,Sn, labelled from 1 to n, you should find the largest i (1≤i≤n) such that there exists an integer j (1≤j<i) and Sj is not a substring of Si.

A substring of a string Si is another string that occurs in Si. For example, ``ruiz" is a substring of ``ruizhang", and ``rzhang" is not a substring of ``ruizhang".

 

 

Input

The first line contains an integer t (1≤t≤50) which is the number of test cases.
For each test case, the first line is the positive integer n (1≤n≤500) and in the following n lines list are the strings S1,S2,⋯,Sn.
All strings are given in lower-case letters and strings are no longer than 2000 letters.

 

 

Output

For each test case, output the largest label you get. If it does not exist, output −1.

 

 

Sample Input

 

4 5 ab abc zabc abcd zabcd 4 you lovinyou aboutlovinyou allaboutlovinyou 5 de def abcd abcde abcdef 3 a ba ccc

 

 

Sample Output

 

Case #1: 4 Case #2: -1 Case #3: 4 Case #4: 3

 

 

Source

2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)

 

 

 

思路:用strstr匹配字符串,假设存在两个字符串i,j,(i < j),如果第i个字符串是第j个字符串的子串,则直接跳出循环即可,因为接下来完全可以用第j个字符串来代替第i个字符串,如果第i个字符串不是第j个字符串的子串,则标记第j个字符串,因为第j个字符串已经是我们要寻找的字符串,以后不用再匹配。

 

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

int t,n,vis[510],cas=0;
char str[510][2010];

int main(){
    scanf("%d",&t);
    while(t --){
        scanf("%d",&n);
        for(int i = 1; i <= n; i ++) scanf("%s",str[i]);
        memset(vis,0,sizeof(vis));
        int ans = -1;
        for(int i = 1; i <= n; i ++){
            for(int j = i+1; j <= n; j ++){//如果第j个是第i个字符的母串,则没有必要再接着匹配下去
                if(!vis[j]){
                    if(strstr(str[j],str[i])) break;
                    else{//否则标记第j个字符串即可
                        vis[j] = 1; ans = max(ans,j);
                    }
                }
            }
        }
        printf("Case #%d: %d\n",++cas,ans);
    }
    return 0;
}

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值