読者です 読者をやめる 読者になる 読者になる

君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Round #395 (Div.2)

はい。
http://codeforces.com/contest/764

A. Taymyr is calling you

ざっくりと大意

・Ilia-alpinistはnの倍数の時に電話を掛けて、Artistsはmの倍数の時に電話に出る。タイミングが合った時だけ通話ができて、通話時間は1分で終る??

Python3

n,m,z=map(int,input().split())
a=set([int(i)*n for i in range(1,z+1) if int(i)*n<=z])
b=set([int(i)*m for i in range(1,z+1) if int(i)*m<=z])
print(len(a&b))

なんか問題文がよくわからないが答えが合うので良しとする。今回はzの以下のnの倍数と同様にmの倍数のset型の配列を用意して共通する数の個数を回とした。z以下にするの忘れて無駄に1WAしましたが。。。コンテスト中の解法ではzとn,mの最小公倍数との商を解にしていた。

B. Timofey and cubes

ざっくりと大意

・n個の数がある数列aがある。数列aは解になる数列を中央から対称の番目の数を入れ替えることを端まで繰り返したような数列??
・最終型の数列aから入れ替え操作前の数列を作って出力する。詳細は問題文下のNoteで。

Python3

n=int(input())
l=[int(i) for i in input().split()]
for i in range(0,n//2,2):
    l[i],l[i*-1-1]=l[i*-1-1],l[i]
print(*l)

コンテスト中はWA、直後はかなりごちゃごちゃした書き方したけど今回は解き直す前に手元でシミュしたらとても単純に求まることに気付いた。左端から中央まで近づいていって奇数番目のだけを入れ替えれば解になる。偶数番目のものは元の配置に戻るので操作の前後で位置は変わらない。と思う。