Polyomino Composer

点击打开链接

啊 这个题 我看样例 推测题意是真的 看不出来 最后看懂了 就剩下 半小时的时间  然后快速的敲打了 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值