题目链接https://vjudge.net/contest/236754#problem/A
题意:在n*m的棋盘放置两个皇后(一黑一白),求两皇后攻击算法
分析:攻击分为 1.同行2.同列3.同对角线 (假设n > m)
1.同行 某一皇后位置为n*m 此时冲突位置为(m-1)。故总位置数量为 n*m*(m-1)。
2.同列 同理 数量为m*n*(n-1)
3.同对角线 分为左上右下冲突和左下右上冲突 每种冲突对角线长度为 1 2 3 4 5 ...n ... n... 5 4 3 2 1
其中n的数量为(m - n + 1) 。长度为i的对角线冲突数量为 i*(i-1)所以
数量在照片里 符号打不出来orz
跑过样例wa了两发 改成longlongAC
代码
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
long long n,m;
while(scanf("%lld%lld",&n,&m) != EOF){
if(n + m == 0){
break;
}
if(n > m){
swap(m,n);
}
long long c = n*m*(m + n-2) + 2*n*(n-1)*(3*m - n - 1)/3;
printf("%lld\n",c);
}
return 0;
}