問題A. カードシャッフル
C枚のカードをM回カットしたとき,W番目にあるカードの番号を求める.
カットはA[j]番目からB[j]枚のカードを山札の一番上に置く.
解法
最後の時点でWにあるカードが最初の時点でどこにあるのかを,カットを逆回しして計算
with open("A-large-practice.in") as f: T = int(f.readline().strip()) for i in xrange(T): M, C, W = map(int, f.readline().strip().split(" ")) A = [0] * C B = [0] * C for j in xrange(C): A[j], B[j] = map(int, f.readline().strip().split(" ")) for j in xrange(C - 1, -1, -1): if W <= B[j]: W += A[j] - 1 elif A[j] + B[j] - 1 >= W: W -= B[j] print "Case #" + str(i + 1) + ": " + str(W)