問題の意味
https://vjudge.net/problem/CodeForces-1256C
それは、幅があるn個の川を。川の左岸には番号が付けられ、右バンク番号で、0をあるN- + 1。河川上及び木製のプラットフォームで、M I のプラットフォームの長さC のI(i番目のプラットフォームは河川占めるようにC I連続位置)。ない以上n以下のことを確認するためのプラットフォームの長さの合計。
あなたは立っている0 (左バンク)、などすなわち右岸に到達するためのn + 1つの位置。あなたが位置xに立つ場合は、省略することができ、[ X + 1、X + D ]の範囲内の任意の位置に配置されています。しかし、あなただけの木製のプラットフォーム(上ジャンプすることができ 、すなわち、ない水 )。たとえば、Dは= 。1(この位置で木製のプラットフォームがある場合)にのみ、次の位置にジャンプ。あなたは、細胞想定することができ、0〜N- +を。1は、木製のプラットフォームに属します。
あなたはとても長い間、彼らは互いに重なり合う(しかし側の2つのプラットフォーム側)していないとして、任意の回数(移動することはできません)に移動し、左または右に任意のプラットフォームを使用することができます。ことを意味しますが、プラットフォームの相対的な順序を変更することはできません。
(あなたは、もはや、あなたが起動したら、モバイルプラットフォームをすることができます)あなたが最初のモバイルプラットフォーム、次にジャンプする必要があることに注意していないしてください。
例えば、N- = 7、M = 3、D = 2、C = [ 1 、2 、。1 1]、それは方法の左岸から右バンクにジャンプ。
思考
私はタイトルの間違った、ピットの父を読み始めました。各ボードの順序を変更することはできませんし、各ボードを過ごすために持っていることに注意してください。私たちの第一の目標は、n + 1、その貪欲ハートビートの手順dに到達することですが、我々はそのボードの長さの現在位置が+ D +、その後、放電し、-1 <= nでない場合は、ボードを置くために十分なスペースを残して検討する必要がありますので我々は、現在の位置+ Dにジャンプし、そうでなければ、N-放電ボードの長さと+1、位置に基板を配置する各ジャンプ、N + 1にジャンプするかどうかを最終的な決意をスキップしません。
コード
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 #define INF 0x3f3f3f3f の#define LL長い長い のconst int型N = 2005; const int型MOD = 1E9 + 7。 constのダブルEPS = 1E-8; constのダブルPI = ACOS(-1.0); #define lowbit(X)(X&( - X)) INTのmain() { のstd :: IOS :: sync_with_stdio(偽)。 整数N、M、D。 一方、(CIN >> N >> M >> D) { INT [N]、W、和= 0。 以下のために(INT I 1 =; I <= M; I ++) { CIN >> W [i]は、 和+ = W [i]は、 } int型、S = 0、T = 1。 INT ANS [N]。 memset(ANS、0、はsizeof(ANS))。 INTフラグ= 0。 一方、(S <= N) { // COUT << "S:" << S << ENDL。 IF(S + Dを+和-1 <= N) 、S + = D。 他 { S = N-和+ 1。 } もし、(S> = N + 1) { ブレーク。 } // COUT << S << ENDL。 もし(T <= M) { ため(INT I = S; [t]はW I <S +、I ++) { ANS [I] = T。 } 、S = S + [T] W -1。 sum- = [T] W。 トン++; そうでなければ フラグ= 1。 ブレーク; } } もし(フラグ) { COUT << "NO" << ENDL。 } 他 { COUT << "YES" << ENDL。 以下のために(INT I 1 =; I <= N; I ++) { COUT << ANS [I] <<」「。 } COUT << ENDL。 } } 0を返します。 }