Codeforces Round #394 (Div.2) 参加記

はい。 oo—- (0/0) 1374(unrated)
http://codeforces.com/contest/761
A問題が大虐殺回、あとサイトが重すぎたち落ちたりstandingやroomが全く表示されなかったりでunratedになった。前にも大虐殺&サイト落ちすぎってあった気がする。個人では成績悪かったのでunratedはうまい。

A. Dasha and Stairs

ざっくりと大意

・階段は各段ごとに1から無限の番号が割り振られた。トラは縞模様のものが好き。
・トラは途中で偶数の段と奇数の段を数えた。l番目の段からr番目の段まで(1 <= l <= r)登った時の偶数の段がa個、奇数の段がb個なのがあり得ればYES、そうでなければNOを出力。
・サンプル1の偶数が2段、奇数が3段というのは一例として1から5段目を登った時に数えていると、2,4段目で偶数が2段と1,3,5段目で奇数が3段になる。

Python3

a,b=map(int,input().split())
print('YES' if (a+b>0) and (a==b or a+1==b or a==b+1) else 'NO')

入力ではa,bがそれぞれ0が与えられる場合があるのとか、l, rが同値だと階段を1段だけ数えて1 0や0 1がYESになるのとか色々やりにくかった。自分がWAでハマったからというが主な要因ですけど、なんかあんまこういうのは好きじゃないな。圧倒的な英語力不足や注意力の不足ですけど縞模様のが好きなのに1段しか数えないのは辛いですわ。

B. Dasha and friends

ざっくりと大意

・長さLのトラックを反時計回りにKefaがAから走る、SashaがBから走る。
・トラック上に障害物がn個あるのを、それぞれの開始位置からのどこにあったかが入力の2行目にKefaのデータ,3行目にSashaのデータがメモされている。
・メモされたとおりのような障害物の配置があり得るか。

Python3

from collections import deque
n,l=[int(i) for i in input().split()]
a=[int(i) for i in input().split()]
b=[int(i) for i in input().split()]
x=deque()
y=deque()
for i in range(n):
    if i==0:
        x.append(a[0]+(l-a[-1]))
    else:
        x.append(a[i]-a[i-1])
for i in range(n):
    if i==0:
        y.append(b[0]+(l-b[-1]))
    else:
        y.append(b[i]-b[i-1])
for i in range(n):
    if x==y:
        print('YES')
        exit()
    tmp=x.popleft()
    x.append(tmp)

print('NO')

障害物の間隔をそれぞれ別の配列に入れて、比較して一致しなければ片方の先頭を取り出して末尾に付け足してをループで繰り返してループが一周する間に一致すればYESで、一致しなければどちらかが嘘をついているデータでNOの判定にした。nが最大50件で、Lの最大長さも100なので適当に全部調べてもTLEはしないと思う。無限ループ抜け忘れがなければ。。

C. Dasha and Password

問題文が何言ってるんだコイツだったり、A問題再提出で忙しいし、サイトも重すぎてどうにもならなかった。