C - たくさんの関数 (Many Functions)
Earlgray
2.5
s
1024
MB
500
点
問題文
$N$ 個の整数係数一次関数 $f_1(x) = p_1 x + q_1,\ f_2(x) = p_2 x + q_2,...,\ f_N(x) = p_N x + q_N$が与えられます。次の$Q$ 個のクエリに答えてください。
$i$ 番目のクエリでは,整数 $M_i$ が与えられるので、次の条件を満たす長さ $L$ の数列$v_1,\ v_2,\ ...\ v_L$が存在するならば,そのうち$L$ が最小のものを1つ、次の形で出力してください。そのような数列が存在しないとき,:(
と出力してください。
$L$
$v_1$ $v_2$ ... $v_L$
- $v_1,\ v_2,\ ...,\ v_L$ はすべて$1$以上 $N$ 以下の自然数
- $k=1,\ 2,\ ...,\ L$に対して、順番に $M_i = f_{v_k}(M_i)$ で置き換えるとき、最終的に $M_i$ が$K$ の倍数となる。
制約
- $1\le N\le 2000$
- $|p_i|,\ |q_i| \le 10^9$
- $1\le Q\le 2000$
- $|M_i|\le 10^{18}$
- $1\le K \le 5000$
- 入力はすべて整数である
小課題
- (10点) $N\le 5,\ Q = 1$
- (20点) $N\le 18,\ Q=1$
- (30点) $N\le 100, Q\le 100$
- (40点) $Q=1$
- (400点) 追加の制約はない。
入力
入力は以下の形式で標準入力から与えられる
$N$
$p_1$ $q_1$
$p_2$ $q_2$
$\vdots$
$p_N$ $q_N$
$Q$ $K$
$M_1$
$M_2$
$\vdots$
$M_Q$
出力
各クエリに対して,問題文の条件を満たす長さ $L$ の数列$v_1,\ v_2,\ ...\ v_L$が存在するならば,そのうち$L$ が最小のものを1つ、次の形で出力して最後に改行してください。そのような数列が存在しないとき,:(
と出力してください。
$L$
$v_1$ $v_2$ ... $v_L$
入力例 1
2
6 68
8 30
1 34
6
出力例 1
3
2 1 2
たとえば,$L=3,\ v= ( 2,\ 1,\ 2 ) $ とすると,
$k=0$ のとき,$M=8\times 6 + 30=78$
$k=1$ のとき,$M=6\times 78 + 68 = 536$
$k=2$ のとき,$M=8\times 536 + 30 =4318\ (=34\times 127)$
となり,たしかに $34$ の倍数となります。$L$ を $3$ より小さくすることは出来ないので,これは正解と判定されます。
入力例 2
1
0 18
1 16
-3
出力例 2
:(
条件を満たす数列 ${v}$ は存在しないので,:(
を出力します。
入力例 3
1
3 3
1 4
100
出力例 3
0
最初から $M$ は $4$ の倍数なので長さ $L$ が最小になる数列 $v$ は空です。
入力例 4
10
-55019437 -297553174
929223531 -152508926
686273562 -636916832
68461231 629261878
197400983 941125983
-617891647 324928030
960643654 829841649
-450199196 -451011608
285845709 -820570082
-262660355 -870132788
5 93
374919008350420307
-441098967928341545
673009558913052096
655743823569525665
-566516649146560284
出力例 4
3
3 4 10
2
8 1
3
4 4 10
3
3 10 8
3
6 4 10