離れて左から右に取ることができます文字列s、sの文字を考えると、少なくとも最初の数秒の位置までトンのスペルを:質問の意味
アイデア:接頭レコード2次元配列した後、半分にすることができます。
1の#include <ビット/ STDC ++ H> 2 3 使用して 名前空間STDを、 4 の#define 5000000 INF 5 の#define N 210050 6 INTの和[N] [ 30 ]。 7 int型 ARR [ 30 ]。 8 文字列sの。 9 文字列strの。 10 INT N。 11 ブール slove(int型のID){ 12 のための(INTは私= 0 ; I < 26 ; I ++ ) 13 場合を(ARR [I] -sum [ID] [I]> 0 ) 14 リターン 偽。 15は 返す 真。 16 } 17 int型のmain(){ 18 CIN >> N。 19 cinを>> STR。 20 INT _; 21 cinを>> _; 22 のために(INT iは= 0 ; I <str.size(); I ++ ){ 23 ++和[I] [STR [I]は、 - ' ' ]。 24 なら(I!= 0 ){ 25 用 (INT J = 0 ; J < 26 ; J ++ ){ 26 和[I] [J] + =和[I- 1 ] [J]。 27 } 28 } 29 } 30 ながら(_-- ){ 31 CIN >> S。 32 のために(INT iは= 0 ; iは<= 26 ; I ++ ) 33 ARR [I] = 0 ; 34 のために(INT iが= 0 ; I <s.size(); iが++ ){ 35 ARR [S [i]を- ' A ' ] ++ ; 36 } 37 のint L = 0 。 38 INT R = N。 39 int型 ANS = infファイル。 40 一方(L <= R){ 41 int型ミッド=(L + R)/ 2 。 42 であれば(slove(MID)){ 43 、R =半ば1 。 44 ANS = 分(ANS、MID)。 45 } 他{ 46 、L =ミッド+ 1; 47 } 48 } 49 COUT << ANS + 1 << ' \ n ' 。 50 } 51 リターン 0 。 52 }