小さなZの夢互いに素セット

問題の説明

小さなZは、彼が最終的に切望されたジャーマン・シェパードを持って夢を夢を見た、とだけ小さなZの多くは唯一のNの合計を数えているが、残念ながらすべての羊飼いのは、実際には白であり、最も小さなZ私は白が好きではありません。そこで彼は、行内の羊飼いのすべてを聞かせて、彼らはM回が操作を染色する準備が整いました。たびに、彼は連続したシェパード、特定の特定の色を複数に染めました。最終的なカラーコリーは、最後の染めた色です。羊飼いが染められていない場合は、その色は白です。

Zは、小さな染色以下の方法を決定した:i番目の染色操作は、まず前記のiは× A + B M O D N + 1 iは× B + AをM O D N +を1。

A、Bは、特定の2つの正の整数であるIに染色全ての間シェパード、。彼はすぐに各色コリーの終わりを知りたいと思いました。

入力形式

最初の直列4の正の整数N、M、A、B

出力フォーマット

N個の出力ラインの合計は、i番目の行は、(色は白であるかの最終的な出力0)は、i番目のシェパードの最終的な色を表します。

サンプル入力

4 3 2 4

サンプル出力

2
2
3
0

制限事項と規則

1 N 1000000 1 M 10000000

1 M × A + B M × A + B 2 31 - 1

制限時間: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 ; 
}

 

おすすめ

転載: www.cnblogs.com/hfang/p/11240006.html