まず、Tを決める。
高さ H 幅 W の四角形を考える。端から端まで使うような経路では T = 2 * (H + W)
中継地点の座標の選び方は (H - 1) * (W - 1) 通り。
その四角形の中から3点を選ぶパターンは、X座標Y座標を3つずつ選んで、
それを組み合わせてできる座標の数。つまり、3!
ex.) X = {0, a, W}, Y = {0, b, H} から作れる座標を組みは3!通り。
それを掛けて足しあわせていけばいい。
分かりやすく説明できないー。
class PatrolRoute { public: int countRoutes(int X, int Y, int minT, int maxT) { const lli mod = 1000000007; lli ret = 0; for (int x = 2; x < (int)X; ++x) { for (int y = 2; y < (int)Y; ++y) { int T = 2 * (x + y); if (minT <= T && T <= maxT) ; else continue; lli a = X - x; lli b = Y - y; ret += a * b * (x - 1) * (y - 1) * 6LL; ret %= mod; } } return ret; } };