水题。。。但是有个地方太坑了,就是输入V时的x,y和输入H时是反着的~~~
边界倒是没必要太关注,数组开大点就是了~~
#include<stdio.h>
#include<string.h>int main(){
int n,m,j,i,k,s=0,q;
int h[50][50],v[50][50];
int maxn[29];
while(scanf("%d",&n)!=EOF){
scanf("%d",&m);
char A[10];
int x,y;
memset(h,0,sizeof(h));
memset(v,0,sizeof(v));
memset(maxn,0,sizeof(maxn));
for(i=1;i<=m;i++){
scanf("%s",A);
scanf("%d %d",&x,&y);
if(A[0]=='H')
h[x][y]=1;
else
v[y][x]=1;
}
for(j=1;j<=n;j++)
for(i=1;i<n;i++)
for(k=1;k<n;k++){
int ens=1;
for(q=1;q<=k;q++)
if(h[i][j+q-1]==0||h[i+k][j+q-1]==0||v[i+q-1][j]==0||v[i+q-1][j+k]==0){
ens=0;break;
}
if(ens==1)
maxn[k]++;
}
if(s){
printf("\n**********************************\n\n");
}
printf("Problem #%d\n\n",++s);
int ans=0;
for(i=1;i<n;i++)
if(maxn[i]!=0){
printf("%d square (s) of size %d\n",maxn[i],i);
ans++;
}
if(ans==0)
printf("No completed squares can be found.\n");
}
return 0;
}