解答:Submission #19699054 - AtCoder Beginner Contest 189
解法:与えられた4種類の座標変換は、tT = [x, y, 1]に対し、3×3の行列Aを左から乗じることで計算することが出来る。具体的には下記の通りである。
- [[0, 1, 0], [-1, 0, 0], [0, 0, 1]]
- [[0, -1, 0], [1, 0, 0], [0, 0, 1]]
- [[1, 0, 0], [0, -1, 2p], [0, 0, 1]]
- [[-1, 0, 2p], [0, 1, 0], [0, 0, 1]]
あとは、各回までの変換をO(1)で行うために、その回までの変換行列を累積積のような形で蓄えておき、各クエリにO(1)で答えてゆけばよい。