啊 这个题 我看样例 推测题意是真的 看不出来 最后看懂了 就剩下 半小时的时间 然后快速的敲打了 100多行 不出意料的wa了!~~~ 英语菜的伤不起啊(--如果能回到三年前的夏天 我一定会告诉自己 英语很有用 所谓知识没有用 只是给自己不学习的理由) 现在也是 同样的 多学习点东西总是没坏处的~~ 这个题意就是给大的方块 和小的方块 看能不能找到 大的能不能通过平移来找到两个小的 其实打比赛的时候思路不清晰 早上起来 就发现这道题就是模拟一下 然后 我的代码可能有一点 不好 就是 改变了 原始的数据 但是为了 简便一点 也直接交了 就直接ac了~~~ 我的思路大概就是 用结构体 来存一下 小的坐标 然后 用小的坐标 来一一对应大的坐标 然后把大的* 改成. 因为两个点不能同时照应一个。。。。。。 如果照应不出来 就直接输出 0
#include<stdio.h>
#include<string.h>
#include<string>
#include<queue>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=30;
char mp[maxn][maxn];
char aa[maxn*maxn];
int xx,yy;
int n,m,len;
struct ppx
{
int x,y;
} a[maxn*maxn+2];
bool judge(int x,int y)
{
int s,t;
for(int i=0; i<len; i++)
{
s=a[i].x-xx+x;
t=a[i].y-yy+y;
if(mp[s][t]=='*')
mp[s][t]='.';
else
return 0;
}
return 1;
}
int main()
{
int flag;
while(~scanf("%d%d",&n,&m)&&(n||m))
{
flag=len=0;
for(int i=0; i<n; i++)
scanf("%s",mp[i]);
for(int i=0; i<m; i++)
{
scanf("%s",aa);
for(int j=0; j<m; j++)
{
if(aa[j]=='*')
{
if(!flag)
{
xx=i;
yy=j;
flag=1;
}
a[len].x=i;
a[len++].y=j;
}
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(mp[i][j]=='*')
{
if(!judge(i,j))
{
flag=0;
break;
}
}
}
if(!flag)
break;
}
printf("%d\n",flag);
}
return 0;
}