題目連結(jié):
題目大意:
給定N、M(N、M皆小於等於10 ^ 6),代表有一N * M的棋盤。求在棋盤上擺放兩個(gè)相異的皇后(西洋棋的皇后可以走對角線或直線上的任何一格),使得兩皇后彼此能互相攻擊的方法數(shù)。
N=M=0時(shí),停止程式。
解題思維:
答案是有數(shù)學(xué)解的,公式可以從以下推導(dǎo):
我們定義其中一個(gè)皇后叫做Q1,另一個(gè)叫做Q2,且假設(shè)以下N ≦ M。
直線的方面很簡單。Q1(或Q2,不影響)從棋盤上便挑一格,Q2挑Q1所在的直線方向剩下的格數(shù)(畢竟不能放在同一格)。因此直線方向的方法數(shù)為:
N * M * (N + M - 2)
而對角線的方面可以由畫圖觀察到,最長的長度為N並有(M - N + 1)* 2條。其餘長度從2~N-1都各有四條。所以對角線方向的方法數(shù)為:
2 *(M - N + 1)* N * (N - 1)+
4[2 * 1+3 * 2+……+(N - 1)*(N - 2)]
簡化一下便變成了
2 *[2 * N *(N-1)*(N-2)/ 3+(M - N + 1)* N *(N-1)]
而直線方向+對角線方向便是所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。