HDU5510 Bazinga (strstr())

来源:互联网 发布:增值税开票软件安装 编辑:程序博客网 时间:2024/06/05 17:55

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 (1in) such that there exists an integer j (1j<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 (1t50) which is the number of test cases.
For each test case, the first line is the positive integer n (1n500) 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
45ababczabcabcdzabcd4youlovinyouaboutlovinyouallaboutlovinyou5dedefabcdabcdeabcdef3abaccc
 

Sample Output
Case #1: 4Case #2: -1Case #3: 4Case #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;}




原创粉丝点击