zoukankan      html  css  js  c++  java
  • hdu 1238 字符串处理 暴力

    Substrings

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 13779    Accepted Submission(s): 6689

    http://acm.hdu.edu.cn/showproblem.php?pid=1238

    Problem Description
    You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.
     
    Input
    The first line of the input file contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1 <= n <= 100), the number of given strings, followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string.
     
    Output
    There should be one line per test case containing the length of the largest string found.
     
    Sample Input
    2 3 ABCD BCDFF BRCD 2 rose orchid
     
    Sample Output
    2 2
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    const int maxn=100+3;
    char str[maxn];
    string ansstr,ss;
    string str2[maxn];
    int t,n;
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            for(int i=0;i<n;i++){
                scanf("%s",str);
                str2[i]=str;
            }
            string temp=str2[0];
            int len=temp.size();
            int ans=0;
            for(int i=0;i<len;i++){
                for(int j=1;j+i<=len;j++){
                    int cnt=1;
                    ss=temp.substr(i,j);
                    for(int k=1;k<n;k++){
                        if(str2[k].find(ss)!=-1){
                            cnt++;
                        }
                    }
                    if(cnt==n){
                        if(ans<j){
                            ans=j;
                            ansstr=ss;
                        }else if(ans==j){
                            ansstr=min(ansstr,ss);
                        }
                    }
                }
            }
            reverse(temp.begin(),temp.end());
            for(int i=0;i<len;i++){
                for(int j=1;j+i<=len;j++){
                    int cnt=1;
                    ss=temp.substr(i,j);
                    for(int k=1;k<n;k++){
                        if(str2[k].find(ss)!=-1){
                            cnt++;
                        }
                    }
                    if(cnt==n){
                        if(ans<j){
                            ans=j;
                            ansstr=ss;
                        }else if(ans==j){
                            ansstr=min(ansstr,ss);
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
    }
    #include<stdio.h>//网上大佬的代码
    #include<algorithm>
    #include<iostream>
    #include<string.h>
    using namespace std;
    
    const int maxn = 105;
    char str[maxn];
    string ansstr;
    string str2[maxn];
    
    int main()
    {
        int n,t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(int i=0;i<n;i++)
            {
                scanf("%s",str);
                str2[i]=str;
            }
            int ans=0;
            string tmp=str2[0];
            int tmplen=tmp.size();
            for(int i=0;i<tmplen;i++)
            {
                for(int j=1;i+j<=tmplen;j++)
                {
                    int cnt=1;
                    string ss=tmp.substr(i,j);
                    for(int k=1;k<n;k++)
                    {
                        if(str2[k].find(ss)!=-1)
                            cnt++;
                    }
                    if(cnt==n)
                    {
                        if(ans<j)
                        {
                            ans=j;
                            ansstr=ss;
                        }
                        else if(ans==j)
                        {
                            ansstr=min(ansstr,ss);
                        }
                    }
                }
            }
            reverse(tmp.begin(),tmp.end());//reverse()会将区间[beg,end)内的元素全部逆序;
            for(int i=0;i<tmplen;i++)
            {
                for(int j=1;i+j<=tmplen;j++)
                {
                    int cnt=1;
                    string ss=tmp.substr(i,j);
                    for(int k=1;k<n;k++)
                    {
                        if(str2[k].find(ss)!=-1)
                            cnt++;
                    }
                    if(cnt==n)
                    {
                      //  cout<<ss<<" "<<cnt<<endl;
                        if(ans<j)
                        {
                            ans=j;
                            ansstr=ss;
                        }
                        else if(ans==j)
                        {
                            ansstr=min(ansstr,ss);
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    codeforces 484D D. Kindergarten(dp)
    codeforces 484B B. Maximum Value(二分)
    codeforces 484A A. Bits(贪心)
    51nod-1537 1537 分解(矩阵快速幂+找规律)
    大数取模
    小明的烦恼
    子网掩码
    How Many Tables
    N的N次方
    外星人的供给站
  • 原文地址:https://www.cnblogs.com/qqshiacm/p/11599482.html
Copyright © 2011-2022 走看看