发现模拟题总是写的很凌乱,想到哪写到哪,写的最后发现有问题打补丁打的乱七八糟,
题目很水,我的方法是扫描到窗口的最上一行记下他的起始位置和结束位置,继续往下扫描,若是完整的窗口,中间每行都是X。。。。。X的形式,最后一行是xxxxx的形式,有个小trick,窗口嵌套要算里面的。
#include <iostream>
#include<cstdio>
#include <algorithm>
using namespace std;
char screen[200][200];
int N,M;
int beg,end,line;
int find(char a)
{
int f1=0;
for (int i=0;i<=N;i++)
for (int j=0;j<=M;j++)
{
if(screen[i][j]==a&&f1==0)
beg=j,f1=1,line=i;
if(screen[i][j]!=a&&f1==1&&j>beg+1)
{
end=j-1;
return 1;
}
}
return 0;
}
bool judge(char a)
{
int i;
for (i=line+1;i<N;i++)
{
if(screen[i][beg]==a&&screen[i][end]==a)
{
if(screen[i][beg+1]==a)
{
if(i-line<2)
return 0;
for (int j=beg;j<=end;j++)
{
if(screen[i][j]!=a) return 0;
}
return 1;
}
else
for(int j=beg+1;j<end;j++)
if(screen[i][j]!='.') return 0;
}
else return 0;
}
return 0;
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&N,&M),N&&M)
{
for (int i=0;i<N;++i)
scanf("%s",screen[i]);
for (int i='A';i<='Z';++i)
{
if(find(i))
if(judge(i))
printf("%c",i);
}
printf("\n");
}
return 0;
}