题目:http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3944
代码:
#include<stdio.h>
#include<string.h>
using namespace std;
char maps[105][105];
char base[105][105]= {{'.','O','.'},{'/','|','\\'},{'(','.',')'}};
int h,w;
int judge(int x,int y) //起点
{
/*for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("%c",base[i][j]);
}
printf("\n");
}*/
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
if(base[i][j]==maps[i+x-2][j+y-2]&&base[i][j]!='.')
{
//printf("%d %d %c %c %d %d %d %d\n",x,y,base[i][j],maps[i+x-2][j+y-2],i,j,i+x-2,j+y-2);
return 1;
}
}
}
return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d\n",&h,&w);
memset(maps,'#',sizeof(maps));
for(int i=2; i<h+2; i++)
{
for(int j=2; j<w+2; j++)
{
scanf("%1c",&maps[i][j]);
}
getchar();
}
/*for(int i=0; i<h+4; i++)
{
for(int j=0; j<w+4; j++)
{
printf("%c",maps[i][j]);
}
printf("\n");
}*/
int ans=0;
for(int i=2; i<=w+4; i++)
{
for(int j=2; j<=h+4; j++)
{
if(judge(i,j))
{
//printf("%d %d\n",i,j);
ans++;
}
}
}
printf("%d\n",ans);
}
}
先把图扩大为
#######
#######
##~~~##
##~~~##
##~~~##
#######
#######
格式。
每次查找以一个点位基础,看能否出现一个小人。
第一次为
###
###
##~
第二次为
###
###
#~~
只要有一个字符 与 基础图型的对应位置 相同就说明 该位置一定有一个人。
经过大神的指点思路,改了好多次,竟然一发A了。
我写的代码我自己都没看懂。