問題一覧 > 通常問題

No.1004 サイコロの実装 (2)

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 232
作問者 : trineutron / テスター : 37zigen
12 ProblemId : 3862 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2022-04-26 01:58:44

問題文

線形合同法という擬似乱数生成法がある。正の整数a,b,ma, b, mを用いてxi+1=axi+b(modm)x_{i+1}=ax_i+b \pmod{m}という漸化式で乱数を生成する。例えば、a=3,b=1,m=7,x0=0a=3, b=1, m=7, x_0=0のときx1=1,x2=4,x3=6,x4=5,x5=2,x6=0,x7=1,x_1=1, x_2=4, x_3=6, x_4=5, x_5=2, x_6=0, x_7=1, \dotsとなる。

剰余を求める演算は通常は遅いが、m=232m=2^{32}のとき、32bit符号なし整数型でaxi+bax_i+bを計算するとオーバーフローにより剰余が計算できるため高速に計算できる。このとき、aa44で割った余りが11となる整数、bbを奇数にすると最大周期2322^{32}になることが知られている。以下、m=232m=2^{32}とする。

サイコロを実装するためには11から66までの整数がおおむね等確率で出る乱数が必要なので、xix_i66で割った余りに11を足した整数をサイコロの出目とする。

高橋君と青木君はこのサイコロを使って以下のようなすごろくをすることにした。

2人とも最初はマス00にいる。高橋君を先手として交互にサイコロを振り、出目の分だけ進む。止まったマス目が奇数なら黒石を、偶数なら白石を得る。これをNN回繰り返し、黒石と白石の組1つにつき11点が得られる。

例えば、NN33、出目が1,3,2,6,4,51, 3, 2, 6, 4, 5のとき、高橋君はマス1,3,71, 3, 7に止まり黒石33個を得て、青木君はマス3,9,143, 9, 14に止まり黒石22個と白石11個を得る。得点はそれぞれ00点と11点となる。

a,b,x0,Na, b, x_0, Nが与えられるので、高橋君と青木君のそれぞれの得点を求めよ。なお、サイコロの最初の出目はx1x_166で割った余りに11を足した整数とする。

入力

a b x0 Na\ b\ x_0\ N

入力は全て整数
0a,b,x0,N<2320 \le a, b, x_0, N \lt 2^{32}
aa44で割った余りは11
bbは奇数

出力

高橋君と青木君の得点をスペース区切りで出力してください。最後に改行してください。

サンプル

サンプル1
入力
5 1 1 1
出力
0 0

x1=6,x2=31x_1 = 6, x_2 = 31なので、高橋君は11を出してマス11に止まり、黒石を得ます。次に、青木君が22を出してマス22に止まり、白石を得ます。2人とも黒石と白石の組はないので、得点は00です。

サンプル2
入力
3000000001 3000000001 3000000001 0
出力
0 0

サイコロを振らない場合もあります。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。