1194CをCodeforces。SからTへ

ポータル

まず貪欲、$ S $缶と$ T $の試合に一致するように試してみてください、ただの$ P $の残りの部分は記入してみましょう

に十分な文字がある場合、$ S $の試合の場合はすべて、$ P $を見てみましょう

#include <iostreamの> 
する#include <cstdioを> 
する#include <アルゴリズム> 
の#include <CStringの> 
する#include <cmath>
 使用して 名前空間STD。
typedefの長い 長いLL。
インラインint型リード()
{ 
    int型のx = 0、F = 1チャー CH = GETCHAR()。
    一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - ')、F = - 1CH =getchar関数(); }
     一方、(CH> = ' 0 ' && CH <= ' 9 '){X =(X << 1)+(X << 3)+(CH ^ 48)。CH = GETCHAR()。}
     戻りのx *のF。
} 
のconst  int型 N = 233 INT Q、N、M、K、CNT [N]、CNTT [N]。
チャーS [N]、T [N]、P [N]。
BOOL VIS [N]。
INT メイン()
{ 
    Q = リード()。
    一方、(Q-- 
    { 
        scanf関数(" %sの"、S + 1)。scanf関数(" %sの"、T + 1)。scanf関数(" %sの"、P + 1 )。
        INT、N = STRLEN(S + 1)、m個の=のSTRLEN(T + 1)、Kの=のSTRLEN(P + 1 )。
        もし(N> M){のprintf(" NOの\ n "); 続け; } 
        のmemset(VIS、0はsizeof (VIS))。
        以下のためにint型 i = 0 ; iは< 30 ; I ++)CNTを[I] = CNTT [I] = 0 ;
        ためにint型 i = 1 ; iが= Kを<; I ++)は、CNT [P [I] - [ A ' ] ++ ;
        INTは L = 0、P = 1 以下のためにint型 I = 1 ; I <= M iは++ 
        { 
            もし(T [I] = S [P]を!)続けます
            VIS [I] = 1P ++; もし(P> N)、ブレーク
        } 
        もし(p <= N){のprintf(" NOの\ n "); 続け; }
         BOOL GG = 0;
        int型 iは= 1 ; I <= M Iは++ 場合(!VIS [I])
            { 
                CNTT [T [I] - [ A ' ] ++ ;
                もし(CNTT [T [I] - [ A ' ]> CNT [T [I] - [ A ' ])GG = 1 
            } 
        であれば(GG)のprintf(" NOの\ n " );
        のprintf(" YES \ nを" ); 
    } 
    戻り 0; 
}

 

おすすめ

転載: www.cnblogs.com/LLTYYC/p/11597764.html