Https://codeforces.com/contest/1265/problem/D // / * うまくやって考えのアイデアと題した構造を横断するような感じでは 問題にジェットコースターや山を想像することができます...... * / の#include <iostreamの> する#include <cstdioを> 使用して名前空間STD; INT N-; int型CNT、最終[5] [5]; //最終何現在の記録は0 ,. 1,2 ,. 3 INT ANS [100005] ; BOOL OK; int型のmain() { 用(INT I = 0; 4 I <; I ++){ scanfの( "%のD"、およびCNTは、[I]); N- + = [I]はCNTは; //の出力は、nであります全長 } ため(INT I = 0; I <4; I ++){ IFは(CNT [I]!)続行; ANS [1] = I; //順次最初のスタートとして0、1、2、3を捕捉 ; OK = trueに するための(INT J = 0; J <4; J ++){ - ; //最終の初期化(J == I)最終[J] = CNT [J] } (; J int型J = 2の場合 <= nであり、j ++){// 最初のものは入れているので、それは、第二から始まる INT ANS P = [J - 1]; IF(P - 1> = 0 &&最終[P - 1]){//小さい(低い)への歩行における ANS [J] = P - 1;最終[P - 1] - ; } そうIF(P + 1 <&&最終4 [P + 1]。 ){//で行く)高い(大に ANS [J] = P + 1;最終[P + 1] - ; } 偽の他= OK; //現在のではないことをお勧めすることができない場合 } IF(OK) { のprintfを( "YES \ N-"); のための(INT I = 1; I <= N; I ++){ のprintf( "%D%C"、ANS [I]、I == N - '\ N-':? 「); } BREAK; } } IF(OK)のprintf( "NO \ N-");! 戻り0; }