#include<iostream>#include<cmath>usingnamespace std;intmain(){int n, m;int F =0, C =0;
cin >> n >> m;for(int hang1 =1; hang1 <= n; hang1++){for(int lie1 =1; lie1 <= m; lie1++){for(int hang2 = hang1; hang2 <= n; hang2++){for(int lie2 = lie1; lie2 <= m; lie2++){if(abs(hang1 - hang2)==abs(lie1 - lie2)){
F++;}else{C++;}}}}}
cout << F <<" "<< C << endl;return0;}
暴力枚举,很容易想到。时间和内存超限。
#include<iostream>usingnamespace std;longlong n , m , F =0, C =0;intmain(){
cin >> n >> m;for(int i =0; i < n; i++){for(int j =0; j < m; j++){if(i == j){
F +=(n-i)*(m-j);}else{
C +=(n-i)*(m-j);}}}
cout << F <<" "<< C << endl;return0;}
属于一种讨巧的做法:正方形数量为 n 与 m 减去同一个数的积,长方形数量反之。(每减去一定大小的数就代表着不同的大小的正方形 / 长方形)一道小学奥数题,考察数学小技巧,而非编程算法。