問題一覧 >
教育的問題
No.2119 一般化百五減算
レベル :
/ 実行時間制限 : 1ケース 2.000秒 / メモリ制限
: 512 MB / 標準ジャッジ問題
タグ :
/
解いたユーザー数 66
作問者 : 👑
p-adic
/ テスター :
遭難者
問題文最終更新日: 2023-02-27 18:06:53
注
コンテスト終了後にtwitterでkotatsugame_tさんより問題文の書き方に関する以下のご指摘をいただき[1]、henkoudekimasuさんよりコンテスト終了後でも修正すべきとのご示唆をいただきました[2]のでご指摘に沿うように修正いたしました:
- 競技プログラミングの問題文においてはmodの表記に原則 [mod∗] を使うべきでなく(mod∗) を使うべきである。
- 競技プログラミングの問題文においては数列の成分の表記に原則 [ ] を使うべきでなくsubscriptを使うべきである。
- 競技プログラミングの問題文においては原則 [ ] を 2 種類の用法で用いるべきではない。
より正確なご指摘・ご示唆の内容はページ下部の出典からご確認いただけます。
この度は競技プログラミングの慣習を知らずに不適切な問題文を記載してしまい参加者の皆様に不快な思いをさせてしまったことを心からお詫び申し上げます。
ついでに読みやすさも改善させるために文言を多少変えました。問題の内容自体に変更はございません。
問題文
入力に非負整数 N と正整数 M と長さ M の正整数列 B と長さ M の整数列 C が与えられます。
数列 a とその長さ未満の非負整数 m に対し、am で a の 1+m 個目の成分を表すことにします。すなわち省略記号 … を用いると a は (a0,a1,…) と表されます。
N 以下の非負整数 n であって M 未満の任意の非負整数 m に対し n≡Cm(modBm) を満たすものが存在するか否かを判定し、存在する場合はその最小値を求めてください。
入力
入力は以下の形式で標準入力から
2+M 行で与えられます:
- 1 行目に N が与えられます。
- 2 行目に M が与えられます。
- M 未満の各非負整数 m に対し、3+m 行目に Bm,Cm が半角空白区切りで与えられます。
制約
入力は以下の制約を満たします:
- N は 105 以下の非負整数
- M は 105 以下の正整数
- M 未満の任意の非負整数 m に対し、Bm は 105 以下の正整数
- M 未満の任意の非負整数 m に対し、Cm は −105 以上 105 以下の整数
出力
N 以下の非負整数 n であって M 未満の任意の非負整数 m に対し n≡Cm(modBm) を満たすものが存在する場合はその最小値を 1 行に出力し、存在しない場合はNaN
と出力してください。
最後に改行してください。
サンプル
サンプル1
入力
10
1
1 2
出力
0
10 以下の非負整数 n であって n≡2(mod1) を満たすものの最小値は 0 です。
サンプル2
入力
100
2
6 3
4 2
出力
NaN
100 以下の非負整数 n であって連立合同式
{nn≡≡3(mod6)2(mod4)
を満たすものは存在しません。
サンプル3
入力
1000
3
3 8
5 4
7 -8
出力
104
非負整数 n であって連立合同式
⎩⎨⎧nnn≡≡≡8(mod3)4(mod5)−8(mod7)
を満たすものとしては例えば
C0×70+C1×21+C2×15=8×70+4×21+(−8)×15=524
がありますが、これから
lcm(B0,B1,B2)=lcm(3,5,7)=105
を引けるだけ引いて得られる非負整数である 104 がそのような n の最小値です。この計算手順がタイトルにもある百五減算の名前の由来ですね。104 は 1000 以下の非負整数でもあるので、これが 1000 以下の非負整数解の最小値となります。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。