agc 013 C - Ants on a Circle (python)
diff が一つ上がるごとに発想が一つ増える感じがする。
緑なら一つ、青diff なら二つといったイメージ
今回の問題は橙diff で実験から3つのことが分かるかどうかみたいな問題だった。
1. ボール i が衝突を考慮しないで t 秒たったときの位置には 1 ~ n までのボールのいずれかが存在する。(衝突時に2つのボールの向きが変わるが速さは同じということは、衝突時にボールの番号が入れ替わっただけと考えても同じだから)
2. ボール 1 からの並び順は、時計回りにみれば常に 1, 2, 3,...,n になっている(ボール i はボール i-1 とボール i+1 の間しか動けない)
3. 最も座標の小さいボールの番号は、スタート時が 1 であり、そこから位置0を時計回りに通過するボールが現れたら -1 し、反時計回りに通過するボールが現れたら +1 する(ただし、ボールの番号が0以下になったらnを足す)
1,2 から t 秒後に座標(位置)の最も小さいボールの番号 s が分かれば 1 ~ n のボールの座標が座標の小さい順に s, s+1, ..., n, 1, 2, ... のように決まり、3 から座標の最も小さいボールの番号 s が分かるので解ける。
n,l,t = map(int,input().split()) c = [] s = 0 for i in range(n): x,w = map(int,input().split()) if w == 1: c.append((x+t)%l) s += (x+t)//l else: c.append((x-t)%l) s += (x-t)//l c.sort() s %= n c = c[s:] + c[:s] print(*[i for i in c], sep='\n')