問題一覧 > 通常問題

No.2104 Multiply-Add

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 62
作問者 : Sumitacchan / テスター : hitonanode 👑 ygussany
2 ProblemId : 8327 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2022-10-08 11:11:47

問題文

22 つの変数 x,yx,y があり、最初は (x,y)=(a,b)(x,y)=(a,b) です。

あなたは以下のいずれかの操作を、好きな順番で合計 10001000 回まで行うことができます(00 回でもよい)。

  • 操作 11 : 整数 k (109k109)k\ (-10^9 \le k \le 10^9) を選択して、xxk×yk \times y を加算する。
  • 操作 22 : 整数 k (109k109)k\ (-10^9 \le k \le 10^9) を選択して、yyk×xk \times x を加算する。
ただし、各操作の後には x109,y109|x|\le 10^9,|y|\le 10^9 が満たされている必要があります。

上記操作により (x,y)=(c,d)(x,y)=(c,d) にすることが可能かを判定し、可能であればそのような操作列を一つ示してください。

制約

  • 108a,b,c,d108-10^8 \le a,b,c,d \le 10^8
  • 入力は全て整数である。

入力

入力は以下の形式で標準入力から与えられます。

a  b  c  da\ \ b\ \ c\ \ d

出力

(x,y)=(c,d)(x,y)=(c,d) にすることが不可能であれば 1-1 を出力してください。

(x,y)=(c,d)(x,y)=(c,d) にすることが可能であれば、そのような操作列を次の形式で出力してください(条件を満たす操作列が複数存在する場合はいずれを出力しても構いません)。

NN
t1  k1t_1\ \ k_1
t2  k2t_2\ \ k_2
\vdots
tN  kNt_N\ \ k_N
ここで、NN は操作回数であり、ti,ki (1iN)t_i,k_i\ (1\le i\le N) はそれぞれ ii 回目の操作における操作の種類と選択した kk の値です。
それぞれ、次の条件を満たす整数である必要があります。

  • 0N10000 \le N\le 1000
  • ti=1t_i=1 または ti=2t_i=2
  • 109ki109-10^9\le k_i \le 10^9

サンプル

サンプル1
入力
5 1 -10 19
出力
4
1 3
2 1
1 -2
2 -1

44 回の操作により (x,y)(x,y) は次のように変化します。
(5,1)(8,1)(8,9)(10,9)(10,19)(5,1) \rightarrow (8,1) \rightarrow (8,9) \rightarrow (-10,9) \rightarrow (-10,19)

サンプル2
入力
0 0 1 -1
出力
-1

何回操作しても (x,y)=(0,0)(x,y)=(0,0) のままです。

サンプル3
入力
123 456 123 456
出力
0

最初から (x,y)=(c,d)(x,y)=(c,d) を満たしています。

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