排列 数学问题
只需要考虑同行、同列、同对角线的情况然后相加。
不妨设n<=m。 同行情况,先选择某一行(n),然后在这一行中选两个元素(m(m−1)),答案是mn(m−1)。 同列类似。 同对角线,对角线的长度可以看成两个1..n再加上m-n+1个n。后者答案是(m−n−1)n(n−1),前者答案是∑i=0ni(i−1)=n(n+1)(2n+1)6−n(n+1)2=n3−n3不要忘记有两个方向的对角线。
http://blog.csdn.net/sdfzyhx/article/details/53857797
1 /*by SilverN*/ 2 #include3 #include 4 #include 5 #include 6 using namespace std; 7 long long n,m; 8 long long ans; 9 int main(){10 while(scanf("%lld%lld",&n,&m) && n){11 if(n>m)swap(n,m);12 ans=2*(2*(n*n*n-n)/3+(m-n-1)*(n-1)*n)+m*n*(m-1)+m*n*(n-1);13 cout< <