考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC034-B - ペア を解く

ABC034-B - ペア

 

10^9 人の人がおり、1と2、3と4、5と6、…

といった感じで前からペアを作っていく

入力された数字とペアになる相手の数字を出力するという問題

 

一見、かなり簡単そうである

 

1 だったら 2 が答え

9 だったら 10 が答え

 

簡単だ。

じゃあ 123456789 だったら… 123456788? 123456790?

 

ちょっと大きい数になると混乱するが、よく考えてみると

1桁目だけに注目してみればいい

 

1と2、3と4、5と6、7と8、9と10、

11と12、13と14、15と16、17と18、19と20、

21と22、23と24、25と26、27と28、29と30、

101と102、103と104、105と106、107と108、109と110、

1001と1002、1003と1004、1005と1006、1007と1008、1009と1010、

 

どれだけ大きくなっても、1桁目の組み合わせは変わらないことがわかる

したがって 123456789 の組み合わせだったら 123456790 だとわかる

 

言い換えると、1桁目が 1,3,5,7,9 の数字の相手はその数字に +1 したもの

1桁目が 0,2,4,6,8 の数字の相手はその数字に -1 したもの

とも言える

 

・123 の相手は 124(= 123 +1

・3456 の相手は 3455(= 3456 -1

 

以上を踏まえて書いたコードは以下の通り

  

提出したコード

# 入力
n=int(input())

if n%10 in (1,3,5,7,9):
  print(n+1)
else:
  print(n-1)

 

入力値の1桁目を求めるために

10 で割った余りを利用していることに注目

 

提出結果はACでした

 

解説スライドを見てようやく気づいたけど、

組み合わせは 偶数と奇数になっている!

 

1桁目が 1,3,5,7,9 のとき〜 とかやっていたけど、それはつまり

その数字が奇数ということだ (1桁目が 0,2,4,6,8 のときは偶数)

なんか少し複雑に考えてしまった

 

解説スライドにはおまけもあるので、興味のある方は見てみるといいかも

 

AtCoder Beginner Contest 034 解説