#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,sum,flag;
int doti,dotj;
int tim=1;
char c;
struct node
{
int heng;
int zong;
}a[10][10];
int judge(int len,int i,int j);
int main()
{
while(cin>>n>>m)
{
memset(a,0,sizeof(a));
while(m--)
{
cin>>c;
cin>>doti>>dotj;
if(c=='H')
{
a[doti][dotj].heng=1;
}
else
{
a[dotj][doti].zong=1;
}
}
flag=0;
if(tim>1)
{
cout<<endl<<"**********************************"<<endl<<endl;
}
cout<<"Problem #"<<tim++<<endl<<endl;
for(int len=1;len<=n-1;len++)
{
sum=0;
for(int i=1;i<=n-len;i++)
{
for(int j=1;j<=n-len;j++)
{
if(judge(len,i,j))
{
sum++;
}
}
}
if(sum>0)
{
cout<<sum<<" square (s) of size "<<len<<endl;
flag=1;
}
}
if(flag==0)
{
cout<<"No completed squares can be found."<<endl;
}
}
}
int judge(int len,int i,int j)
{
for(int k=0;k<len;k++)
{
if(((a[i][j+k].heng)!=1)||((a[i+len][j+k].heng)!=1)||((a[i+k][j].zong)!=1)||((a[i+k][j+len].zong)!=1))
{
return 0;
}
}
return 1;
}
后记:
①书本上翻译有错误。
更正:H i j 代表边(i,j)-(i,j+1)
V i j 代表边(j,i)-(j+1,i)
②注意输出格式。"**********************"前有一个"\n",后有两个"\n"。
③暴力求解 。