ハイロード・フレイ
トピックへのリンク:https://code.mi.com/problem/list/view?id=113
比較的暴力このソリューションは、メインは、二つ以上の例弾丸死んだ貝ことに留意すべきです。
#include <iostreamの> する#include < ストリング > する#include <stdio.hに> する#include <アルゴリズム> の#include <ベクトル> 使用して 名前空間はstdを、 int型 [ 10001 ]; 無効感染(INT I、INT N-){ BOOLフラグに= falseに; のため(int型 J = I; J <N-; J ++ ){ // カートリッジケース2デッド IF([J] <= 0)続けます。 [J] - = 2 。 もし([J] <= 0)フラグ= 真。 } もし(フラグ) 感染(I + 1 、N)。 } INT のmain(){ int型のn = 0、RESが= 0 、T。 一方、(〜のscanf(" %dの"、&T))[N ++] = T。 ソート( +のN)。 以下のために(int型 i = 0 ; iは<N; iは++ ){ 場合([i]が> 0 ){ 場合([I]%2 ){ [I] ++ ; } RES + = [I] / 2 。 用(int型 J = iは+ 1、J <nであり、j ++ ){ [j]は - = [I]。 } } 感染(I + 1 、N)。 しながら、式(I <N && [I + 1 ] <= 0 ) I ++ ; } coutの << RES << てendl; リターン 0 ; }
この抽象は、減算ベースレコードとの中間をインクリメントすることではありません。(長い長い少し良くに、それを考えるだけオープンベースを完成、しかし爆発しませんでした)
#include <iostreamの> する#include < ストリング > する#include <stdio.hに> する#include <アルゴリズム> の#include <ベクトル> 使用して 名前空間はstdを、 int型 [ 10001 ]; INT 基地 = 0 。 INT のmain(){ int型のn = 0、RESが= 0 、T。 一方、(〜のscanf(" %dの"、&T)){ 場合(Tの== 0)ブレーク。 [N ++] = T。 } ソート(A、A + N-); のため(int型 I = 0、I <N - 、I ++は){ // ショットジャンプ死が2以上である IF([I] - (ベース - 2)<= 0)続行; // 最初の粉末カートリッジ死んだ個体を、ベース+ 2 = IF([I] - 基本 <= 0){ 基本 + = 2 ; 続ける;} IF([I]%2 ){ [I] ++ ; } RES + =([I] - 塩基)/ 2 。 基地 + =([I] - 塩基)+ 2 。 } coutの << RES << てendl; リターン 0 ; }