問題の説明
小さなZは、彼が最終的に切望されたジャーマン・シェパードを持って夢を夢を見た、とだけ小さなZの多くは唯一のNの合計を数えているが、残念ながらすべての羊飼いのは、実際には白であり、最も小さなZ私は白が好きではありません。そこで彼は、行内の羊飼いのすべてを聞かせて、彼らはM回が操作を染色する準備が整いました。たびに、彼は連続したシェパード、特定の特定の色を複数に染めました。最終的なカラーコリーは、最後の染めた色です。羊飼いが染められていない場合は、その色は白です。
Zは、小さな染色以下の方法を決定した:i番目の染色操作は、まず前記の(iは× A + B )M
A、Bは、特定の2つの正の整数であるIに染色全ての間シェパード、。彼はすぐに各色コリーの終わりを知りたいと思いました。
入力形式
最初の直列4の正の整数N、M、A、B
出力フォーマット
N個の出力ラインの合計は、i番目の行は、(色は白であるかの最終的な出力0)は、i番目のシェパードの最終的な色を表します。
サンプル入力
4 3 2 4
サンプル出力
2
2
3
0
制限事項と規則
1 ≤ N
1 ≤ M
制限時間:5秒
スペースの制約:128メガバイト
#include <iostreamの> する#include <cstdioを> する#include <アルゴリズム> の#include <cmath> の#include <CStringの> 使用して 名前空間STD。 const int型 MAXN = 1000000 + 10 。 INT F [MAXN]は、[MAXN] ANS。 INT(見つけるINT X) { 場合(!F [X] || F [X] == x)をリターン [X] = FをXと、 戻り F [X] = 検索(F [X])。 } int型のmain() { int型N、M、B。 CIN >> N >> M >> A >> B。 // ため(; iがn = <; I = 1 int型私は++)F [N] = I。 用(int型 ; I i-- I = Mを) { int型 Lが=%(私は+ Bを*)N + 1 。 INT R =%N +(私はB + A *)1 。 場合(L> R)スワップ(L、R)。 用(INT ; J <= R J = J =見つける(L)を見つける(J)) { ANS [J] = I。 F [J] = J + 1 。 } } のための(int型 i = 1 ; iが<= N; iが++ ) のprintf(" %d個の\ nを" 、ANSは、[I]); 戻り 0 ; }