标签:
时间限制:1000 ms | 内存限制:65535 KB 难度:4
4 3 .**. **** .**. .... **. .** ... 3 3 *** *.* *** *.. *.. **. 4 2 **** .... .... .... *. *. 0 0
1 0 0
模拟,记录小矩形中*号第一次出现的位置a,b,大矩形中*号第一次出现的位置 c,d.小矩形与大矩形的映射关系是 g[i][j] <---> G[c+i-a][d+j-b],匹配两次即可。
#include <stdio.h> #include <stdlib.h> #include <math.h> #define Lim 0.999999 #define EPS 1e-2 #define PI acos(-1.0) using namespace std; int n,m; char graph1[15][15],graph[15][15]; int a,b,c,d; ///分别记录大矩形和小矩形内*第一次出现 void get(){ bool flag = false; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(graph[i][j]==‘*‘&&!flag){ flag = true; c = i; d = j; } } } } bool judge(){ get(); for(int i=1;i<=m;i++){ for(int j=1;j<=m;j++){ if(graph1[i][j]==‘*‘){ if(graph[c+i-a][d+j-b]==‘*‘){ graph[c+i-a][d+j-b] = ‘.‘; }else return 0; } } } get(); for(int i=1;i<=m;i++){ for(int j=1;j<=m;j++){ if(graph1[i][j]==‘*‘){ if(graph[c+i-a][d+j-b]==‘*‘){ graph[c+i-a][d+j-b] = ‘.‘; }else return 0; } } } return 1; } int main(){ while(scanf("%d%d",&n,&m)!=EOF,n+m){ for(int i=1;i<=n;i++){ scanf("%s",graph[i]+1); } bool flag = false; for(int i=1;i<=m;i++){ scanf("%s",graph1[i]+1); for(int j=1;j<=m;j++){ if(graph1[i][j]==‘*‘&&!flag){ flag = true; a = i,b = j; } } } if(judge()) printf("1\n"); else printf("0\n"); } }
标签:
原文地址:http://www.cnblogs.com/liyinggang/p/5781748.html