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

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

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

Codeforces Round #393 (Div.2) (8VC Venture Cup 2017 - Final Round Div.2 Edition)

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

A. Petr and a calendar

ざっくりと大意

・m月の1日がd番目の曜日の時にカレンダーは何段表記になるか。

Python3

m,d=map(int,input().split())
if m==2:
    ans=4+[0,1][d!=1]
elif m in [4,6,9,11]:
    ans=5+[0,1][d>6]
else:
    ans=5+[0,1][d>5]

print(ans)

2月は1の曜日から以外が5段になる。30日までの月は7の曜日から以外が5段になる。31日までの月は6,7の曜日から以外が5段になる。リストを多次元にしてif分岐減らせるかもしれないけど何しているかわかりにくいし、分類通りにif分岐書いたほうが自然だろうと思う。

B. Frodo and pillows

ざっくりと大意

・n人のホビットがn個のベッドでm個の枕を使う。隣との枕の個数の差が2個以上になると喧嘩になる。
・喧嘩を発生させることなくFrodoはk番目のベッドでできるだけ沢山の枕を使いたい。  

Python3

#あとで

editionalではFrodoが使える枕をx、Frodoの隣から端までのベッドの数をyとしている? y > x - 1 ならば (x - 1) * x / 2 + y (x - 1) 、違うなら (x - 1 + x - y) * y / 2で隣から端までの枕の必要個数が求まるらしい? ので mの最大値が109を2分探索していって枕が足りるxの最大値を探すらしい。