题目: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了。
我写的代码我自己都没看懂。