AtCoder Regular Contest 048
はい。
https://atcoder.jp/contests/arc048
A - 階段の下
PyPy3
a,b=map(int,input().split()) print(abs(b-a)+[0,-1][a<0 and b>0])
基本的にはa,bの差分で。aが地下階でbが地上階の時は差分だけで見ると存在しないはずの0階を数えてしまっているので調整します。
B - AtCoderでじゃんけんを
Python3
def sol(): n=int(input()) t={} w=[] ans=[[0]*3 for i in range(n)] for i in range(n): r,h=map(int,input().split()) w.append((r,h-1,i)) if r not in t: t[r]=[0]*3 t[r][h-1]+=1 w.sort() chk=[10**6,n] while len(w): x=w.pop() if x[0]<chk[0]: chk[0]=x[0] chk[1]-=sum(t[x[0]]) ans[x[2]][0]+=chk[1] ans[x[2]][1]+=n-chk[1]-sum(t[x[0]]) ans[x[2]][2]+=t[x[0]][x[1]]-1 if x[1]==0: ans[x[2]][0]+=t[x[0]][1] ans[x[2]][1]+=t[x[0]][2] elif x[1]==1: ans[x[2]][0]+=t[x[0]][2] ans[x[2]][1]+=t[x[0]][0] elif x[1]==2: ans[x[2]][0]+=t[x[0]][0] ans[x[2]][1]+=t[x[0]][1] for i in ans: print(*i) if __name__=="__main__": sol()
単純に総当りでシミュするとTLEします。公式解説ではレート低い方からと書かれていますが上のコードでは高い方から見ています。どちらでもいいのだと思います。
レートの高い方から見ていってより低いレートの人数は勝ち、より高いレートの人数は負けでまとめてカウントします。同じレートの人たちとは手の内容を見て勝ち負け引き分けを確認します。大したパターン数ではないので手元で動作確認しながら書けば大丈夫だと思います。