暴力を扱うHDU 1238文字列

ストリング

時間制限:2000/1000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):13779受理提出(S):6689

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

問題の説明
あなたはX、またはその逆のいずれかが与えられた文字列のいずれかの部分文字列として求めることができるように、最大​​の文字列Xを見つけ、アルファベットの大文字と小文字を区別した文字列の数を与えられています。
 

 

入力
入力ファイルの最初の行は、単一の整数t(1 <= T <= 10)、各テストケースのための入力データに続くテストケースの数を含んでいます。各テストケースの最初の行は、単一の整数N(1 <= N <= 100)が含まれ、n行に続く所定の列の数、最小の長さは1、最大長100のそれぞれ表す1つの文字列は、余分はありません文字列の前後の空白。
 

 

出力
見つかった最大の文字列の長さを含むテストケースごとに1行があるはずです。
 

 

サンプル入力
2 3 ABCD BCDFF BRCD 2蘭バラ
 

 

サンプル出力
2 2
#include <cstdioを> 
する#include <CStringの> 
する#include <アルゴリズム> 
の#include <iostreamの>
 使用して 名前空間STD。
CONSTの INT MAXN = 100 + 3 チャーSTR [MAXN]。
文字列ansstr、SS。
文字列STR2 [MAXN]。
int型T、N。
INT メイン(){ 
    scanf関数(" %のD "、&T)。
    一方、(t-- ){ 
        scanf関数(" %のD "、&N)
        以下のためのint型i = 0 ; iがn <; iは++ ){ 
            scanf関数(" %sの" 、STR)。
            STR2 [I] = STR。
        } 
        文字列 TEMP = STR2 [ 0 ]。
        INT LEN = temp.size()。
        int型 ANS = 0 ;
        以下のためにint型 i = 0 ; iがLEN <; iは++ ){
             ためのint型、J = 1、J + iが<= LENあり、j ++ ){
                 int型の CNT = 1 
                SS =temp.substr(i、j)は、
                int型のk = 1 ; K <N; ++ k個){
                     場合(STR2 [K] .find(SS)=! - 1 ){ 
                        CNTを ++ 
                    } 
                } 
                もし(CNT == N){
                     場合(ANS < J){ 
                        ANS = J。
                        ansstr = SS。
                    } そう であれば(ANS ==のJ){ 
                        ansstr = 分(ansstr、SS)。 
                    }
                } 
            } 
        } 
        (temp.begin()、temp.end())を逆; 
        以下のためにint型 i = 0 ; iがLEN <; iは++ ){
             ためのint型、J = 1、J + iが<= LENあり、j ++ ){
                 int型の CNT = 1 
                SS = temp.substr(i、j)は、
                int型のk = 1 ; K <N; ++ k個){
                     場合(STR2 [K] .find(SS)=! - 1 ){ 
                        CNTを ++; 
                    } 
                } 
                もし(CNT == N){
                     場合(年齢< J){  = J。
                        ansstr = SS。
                    } そうで あれば(年== J){ 
                        ansstr = 分(ansstr、SS)。
                    } 
                } 
            } 
        } 
        のprintf(" %d個の\ n " 、年)。
    } 
}
書式#include <stdio.hに> //网上大佬的代码
する#include <アルゴリズム> 
書式#include <iostreamの> 
の#include < 文字列の.h>
 使用して 名前空間はstd; 

const  int型 MAXN = 105 ;
チャーSTR [MAXN]。
文字列ansstr。
文字列STR2 [MAXN]。

INT のmain()
{ 
    int型N、T。
    scanf関数(" %のD "、&T)。
    一方、(t-- 
    { 
        scanf関数(" %のD "、&N)
        ためにint型 I = 0 ; iがN <; Iは++ 
        { 
            scanf関数(" %sの" 、STR)。
            STR2 [I] = STR。
        } 
        INT ANS = 0 文字列 TMP = STR2 [ 0 ]。
        INT tmplen = tmp.size()。
        以下のためにint型 i = 0 ; iは<tmplen; iは++ 
        { 
            ためint型の J = 1 ; iは+ J <= tmplenあり、j ++ 
            { 
                int型の CNT = 1;
                文字列 SS = tmp.substr(i、j)は、
                int型のk = 1 k個++; N <K 
                { 
                    場合(!STR2は、[K] .find(SS)= - 1 
                        CNT ++ 
                } 
                であれば(CNT == N)
                { 
                    場合(ANS < J)
                    { 
                        ANS = J。
                        ansstr = SS。
                    } 
                    それ以外の 場合(ANS ==のJ) 
                    {
                        ansstr = 分(ansstr、SS); 
                    } 
                } 
            } 
        } 
        リバース(tmp.begin()、tmp.end()); // リバース()は区間[BEG、エンド)全て逆内の要素であろう。
        ためINT私は= 0 ;私は<tmplen; I ++ 
        { 
            ためINT J = 1 ; Iは、Jを+ <= tmplen; J ++ 
            { 
                int型 = CNTを1。;
                 文字列 SS = tmp.substr(I、J)
                 のためのint型 K =1  ; K <N-、K ++
                { 
                    もし!(STR2 [K] .find(SS)= - 1 
                        CNT ++ 
                } 
                であれば(CNT == N)
                { 
                  //   COUT << SS <<」「<< CNT << ENDL。
                    もし(ANS < J)
                    { 
                        ANS = J。
                        ansstr = SS。
                    } 
                    そう であれば(ANS ==のJ)
                    { 
                        ansstr = 分(ansstr、SS)。
                    }
                } 
            } 
        } 
        のprintf(" %d個の\ n " 、ANS)。
    } 
}

 

おすすめ

転載: www.cnblogs.com/qqshiacm/p/11599482.html
おすすめ