因为没有题目,所以我只是按照书上描述的写的,输入输出可能有点差错
#include <cstdio>
#include <algorithm>
using namespace std;
int Lu[10][10], n, sum = 0;
//检验正方形边长1~n - 1各种可能情况下是否能构成正方形
void dfs(int x, int y){
int len = 1, flag;
if (Lu[x + 1][y] != 1 || Lu[x][y + 1] != 1)
return ;
for ( len; len < n - x && len < n - y; len++){
flag = 0;
for (int i = 1; i <= len; i++)
if (Lu[x][i] == 1)
flag++;
for (int i = 1; i <= len; i++)
if (Lu[i][y] == 1)
flag++;
for (int i = 1; i <= len; i++)
if (Lu[x + len][i] == 1)
flag++;
for (int i = 1; i <= len; i++)
if (Lu[i][y + len] == 1)
flag++;
if (flag == 4 * len)
sum++;
}
return ;
}
int main(){
char a = '1';
int x = 1, y;
while (scanf("%d", &n) != EOF){
memset(Lu, 0, sizeof(Lu));
while(x != 0){
scanf("%c%d%d", &a, &x, &y);
if (a == 'V')
Lu[x + 1][y] = 1;
else if (a == 'H')
Lu[x][y + 1] = 1;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
dfs(i, j);
printf("%d\n", sum);
}
return 0;
}