Description
Input
Output
Sample Input
4 3 .**. **** .**. .... **. .** ... 3 3 *** *.* *** *.. *.. **. 4 2 **** .... .... .... *. *. 0 0
Sample Output
1 0 0
思路:判斷一個大的連塊拼圖能否由兩個小的相同的拼圖拼在一起;
瞎搞!
#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
int n,m;
char s1[20][20]; //目標字符串
char s2[20][20]; //匹配字符串
int a,b;
int c,d;
void get_big()
{
int flag=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(s1[i][j]=='*')
{
a=i;
b=j;
flag=1;
break;
}
}
if(flag)break;
}
}
void get_small()
{
int flag=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
if(s2[i][j]=='*')
{
c=i;
d=j;
flag=1;
break;
}
}
if(flag)break;
}
}
bool check()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(s1[i][j]=='*')return false;
}
return true;
}
int solve()
{
get_small();
while(!check())
{
get_big();
for(int i=c;i<m;i++)
for(int j=0;j<m;j++)
{
if(s2[i][j]=='*') //開始匹配
{
if(s1[i-c+a][j-d+b]=='*')
{
s1[i-c+a][j-d+b]='.';
}
else
return 0;
}
}
}
return 1;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0 && m==0)break;
for(int i=0;i<n;i++)scanf("%s",s1[i]);
for(int i=0;i<m;i++)scanf("%s",s2[i]);
int ans=solve();
cout<<ans<<endl;
}
return 0;
}