2019頭の牛のオフより多くの学校合宿第三補充

 

B题:クレイジーバイナリ列

-1として0、および接頭辞に、POS [0 + N] = 0

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、

const  int型 MAXN = 1E5 + 3 ;
INT [MAXN]。 
INT POS [MAXN << 1 ]。
文字列sの。

int型のmain(){ 
    IOS :: sync_with_stdio();
    int型のn; 
    CIN >> N >> S;
    以下のためにint型 i = 0 ; iがn <; iは++ ){
         場合(S [I] ==が' 0 ')[I] = [I- 1 ] - 1 [I] = A [I- 1 ] + 1 ; 
    } 
    のためのint型 I = 0 ;私は= < 2 * N-を、Iは++ ){ 
        POS [I] = - 1 ; 
    } 
    POS [ 0 + N - ] = 0 ;   // これは単純ではないことに留意されたいが、0 + N-0 
    INT ANS = 0 ;
     のためint型 I = 0、I <N - 、I ++は){
         IF(!POS [N- + [I] = - 。1 
            ANS = MAX(ANS、I-POS [N- + A [I]);
         {
            POS [N + [I] = I。
        } 
    } 
    COUT << ANS << "  " int型ゼロ= 0 以下のためにint型 i = 0 ; iがn <I ++は{)
        ゼロ + = S [I] == ' 0 ' 
    } 
    COUT <<(MIN(ゼロ、nはゼロ)<< 1)<< ENDL。
}
コードの表示

 

H题:マジックライン

ソート、N / 2ポイント及びN / 2 + 1点を見つけます。

書式#include <cstdioを> 
する#include <iostreamの> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
const  int型 MAXN = 20000 ;
const  int型 M = 900000009 ;
構造体のポイント{
     int型X、Y。
} PO [MAXN]。
BOOL CMP(A点、B点){
     場合(!AX = BX)戻り AX < BX。
    それ以外の 戻り AY < によって、
} 
int型のmain(){
     int型T、N。
    scanf関数(" %d個"、&T)。
    一方、(T-- ){ 
        scanf関数(" %のD "、&N)
        以下のためにint型私= 1 ; iが<= N; iが++ ){ 
            scanf関数(" %D%D "、およびPO [I] .X、&PO [I] .Y)。
        } 
        ソート(PO + 1、PO + 1 + N、CMP)。
        もし(PO [N / 2 ] .X!= PO [N / 2 + 1 ] .X)のprintf(" %D%D%D%D \ n "、PO [N / 2 ] .X、M、PO [N / 2 +1 ]、 - M)。
        のprintf(" %D%D%D%D \ n "、PO [N / 2 ] .x- 1、PO [N / 2 + 1 ]・Y + M、PO [N / 2 ]・X + 1、 PO [N / 2 ] .y- M)。
    } 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/-Zzz-/p/11525297.html