这不是在“暴力枚举”题单里面吗?怎么暴力枚举就TLE了?
/*
思路:
假如这是一个方格:
A点↓
|``````````````````````|
| |
| |
| |
| |
| |
| |
|______________________|
B点↑
将A点作为起始点,B点作为结束点的方形是一个正方形。
*/
#include <iostream>
using namespace std;
struct point { // 结构体“点”
int x, y;
};
bool isSquare(point start, point end) { // 判断是否为正方形
return end.x - start.x == end.y - start.y;
}
int main() {
int l, w;
long long squares = 0, rectangles = 0;
point a, b;
cin >> l >> w; // l是长度,w是宽度
for (int i = 0; i < l; i++) { // i是A点的x坐标
for (int j = 0; j < w; j++) { // j是A点的y坐标
for (int k = 0; k <= l; k++) { // k是B点的x坐标
for (int n = 0; n <= w; n++) { // n是B点的y坐标(因为l被占用了,所以用n)
if (k > i and n > j) { // 作为结束点的B点,x和y坐标都要比作为起始点的A点大
a.x = i;
a.y = j;
b.x = k;
b.y = n;
if (isSquare(a, b)) {
squares++;
}
else {
rectangles++;
}
}
}
}
}
}
printf("%lld %lld\n", squares, rectangles);
return 0;
}