問題:
あなたはこれまでに出会った人たちの名刺を集めています。名刺はバインダーに保存されており、1枚のファイルにはn個のポケットが横に並んでいます。表と裏の両面から名刺を眺めることができ、1つのポケットには2枚の名刺が背中合わせに入っています。
名刺の番号mが与えられるので、その名刺の裏側の名刺の番号を表示するプログラムを作成してください。番号mの名刺の裏面には必ず名刺が存在するものとします。
入力値:
n m
期待される出力値:
m番の名刺の裏側の番号
条件:
1 ≦ n ≦ 100,000
1 ≦ m ≦ 100,000
Pythonプログラム:
# 入力値を読み込み、nとmに分割
n, m = list(map(int, input().split()))
# 名刺のページ番号を計算
# (m-1) // (n * 2) は0始まりのページ番号、+1で1始まりのページ番号に変換
page = (m-1) // (n * 2) + 1
# ページの最後の名刺番号を計算
pmax = page * n * 2
# ページの最初の名刺番号を計算
pmin = pmax - (n * 2 - 1)
# 名刺の裏側の番号を計算
# pmax + pmin - m でm番の名刺の裏側の番号を求める
print(pmax + pmin - m)
コードの説明:
-
入力値の読み込み:
n, m = list(map(int, input().split()))
- 入力を読み込み、
n
とm
に分割して格納します。
- 入力を読み込み、
-
ページ番号の計算:
page = (m-1) // (n * 2) + 1
-
(m-1) // (n * 2)
は0始まりのページ番号を計算します。+1
することで1始まりのページ番号に変換します。
-
-
ページの最初と最後の名刺番号の計算:
pmax = page * n * 2 pmin = pmax - (n * 2 - 1)
-
pmax
はページの最後の名刺番号を計算します。 -
pmin
はページの最初の名刺番号を計算します。
-
-
名刺の裏側の番号の計算:
print(pmax + pmin - m)
-
pmax + pmin - m
でm
番の名刺の裏側の番号を計算します。
-