湖南省第七届大学生计算机程序设计竞赛 多连块拼图 (模拟)

湖南省第七届大学生计算机程序设计竞赛 多连块拼图 (模拟)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

多连块拼图

时间限制:
1000 ms  |  内存限制:
65535 KB
难度:
4

描写叙述
    多连块是指由多个等大正方形边与边连接而成的平面连通图形。         ————
 维基百科
 

    给一个大多连块和小多连块,你的任务是推断大多连块能否够由两个这种小多连块拼成。小多连块仅仅能平移,不能旋转或者翻转。两个小多连块不得重叠。左下图是一个合法的拼法,但右边两幅图都非法。中间那幅图的问题在于当中一个小多连块旋转了,而右图更离谱:拼在一起的那两个多连块根本就不是那个给定的小多连块(给定的小多连块画在右下方)。 
湖南省第七届大学生计算机程序设计竞赛 多连块拼图 (模拟)

输入
输入最多包括 20 组測试数据。每组数据第一行为两个整数 n 和 m(1<=m<=n<=10)。下面 n 行描写叙述大多连块,当中每行恰好包括 n 个字符*或者.,当中*表示属于多连块,.表示不属于。下面 m 行为小多连块,格式同大多连块。输入保证是合法的多连块(注意,多连块至少包括一个正方形)。输入结束标志为 n=m=0。
输出
对于每组測试数据,假设能够拼成,输出 1,否则输出 0。
例子输入
4 3 
.**. 
**** 
.**. 
.... 
**. 
.** 
... 
3 3 
*** 
*.* 
*** 
*.. 
*.. 
**. 
4 2 
**** 
.... 
.... 
.... 
*. 
*. 
0 0 
例子输出
1 
0 
0
来源

湖南省第七届大学生计算机程序设计竞赛


这道能够算是一道模拟题吧,利用给出的小多连块,进行平移,去匹配大多连快的内容,看能否匹配成功,这里我们能够採用模拟它进行匹配,记录大,小多连块的第一个‘*’的位置,然后用小连块去进行匹配,就相当于去消除大多连块的‘*’,逐个枚举进行匹配;要学习这样的匹配和枚举的方法;

#include <cstdio>
#include <cstring>
using namespace std;
char map[10][10],s[10][10];
int x1,y1,x2,y2,n,m;
void get_big()//获得大多连块的第一个‘*’位置
{
    bool flag=true;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(s[i][j]=='*')
            {
                x1=i;
                y1=j;
                flag=false;
                break;
            }
        }
         if(!flag) break;
    }
}
void get_small()//获得小多连块的第一个‘*’位置
{
    bool flag=true;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(map[i][j]=='*')
            {
                x2=i;
                y2=j;
                flag=false;
                break;
            }
        }
        if(!flag) break;
    }
}
bool judge()//推断是否所有匹配
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        if(s[i][j]=='*')
        return false;
    return true;
}
int sovle()//匹配过程
{
    get_small();
    while(!judge())
    {
        get_big();
        for(int i=x2;i<m;i++)
            for(int j=0;j<m;j++)
        {
            if(map[i][j]=='*')
            {
                 if(s[x1+i-x2][y1+j-y2]=='*')//关键就是这里,用小连块的位置去匹配大连块的位置
                        s[x1+i-x2][y1+j-y2]='.';
                else
                    return 0;
            }
        }
    }
    return 1;
}
int main()
{
    int i,j;
    while(scanf("%d%d",&n,&m)&&n&&m)
    {
        for(i=0;i<n;i++)
          scanf("%s",s[i]);
        for(j=0;j<m;j++)
          scanf("%s",map[j]);
        printf("%d\n",sovle());
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117909.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • AdminLTE框架的基本使用

    AdminLTE框架的基本使用框架介绍:AdminLTE是一个完全响应管理模板。基于Bootstrap3,jQuery3.3.1这两个框架框架,易定制模板。适合多种屏幕分辨率,从小型移动设备到大型台式机。内置了多个页面,包括仪表盘、邮箱、日历、锁屏、登录及注册、404错误、500错误等页面。对于后台站点的模板渲染,有很大的作用。下载可以使用gitclone到本地gitclonehttp…

    2022年7月27日
    10
  • Oracle修改system用户密码[通俗易懂]

    Oracle修改system用户密码[通俗易懂]服务器上oracle经常会使用plsqldeveloper访问,很多时候我们用的服务器,或者之前的密码我们并不知道,这个时候需要修改system的用户密码,当然也可以无用户登录,但是修改必然还是好些。下面讲讲方法,windows服务器,oracle11g。windows服务器:打开cmd运行命令 输入sqlplus/nolog—–实现无用户名登录       con…

    2022年7月28日
    6
  • javaee框架整合开发入门到实战源码_java底层框架

    javaee框架整合开发入门到实战源码_java底层框架kunJkunJ框架,是基于HK2框架的一个自实现注入框架,功能比较简单,重在探索依赖注入的实现原理。实现细节1.自定义3个注解,Access,Inject,Service2.在Servi

    2022年8月3日
    3
  • MybatisPlus 分布式Id

    MybatisPlus 分布式Id对于分布式id,有很多方案,现在大多数用的是基于雪花算法snowflake的实现,美团有leaf,百度有uid-generator,我这里记录下苞米豆在MybatisPlus3中的分布式id实现简单介绍下雪花算法雪花算法也叫雪花id,是一个64bit的整型数据,原生的snowflake是这样的:最高位不用,41bit保存时间戳,单位是毫秒,10bit的机器位,12bit的唯一序列号,可以理解是某一毫秒内,某台机器生成了不重复的序列号10bit一般一会分为5bit的datacen

    2022年10月30日
    0
  • Java详解:淘宝秒杀脚本java

    Java详解:淘宝秒杀脚本java造成雪崩的真实场景1.4.1服务提供者不可用硬件故障:如网络故障、硬盘损坏等。程序的bug:如算法需要占用大量CPU的计算时间导致CPU使用率过高。缓存击穿:比如应用刚重启,短时间内缓存是失效的,导致大量请求直接访问到了数据库,数据库不堪重负,服务不可用。秒杀和大促:服务短时间承载不了那么多请求量。1.4.2重试加大流量用户连续重试:比如用户看到界面上没有响应,所以又操作了一遍,结果又增加了一倍请求量。程序重试机制:比如代码中有多次重试的逻辑,一次失

    2022年6月1日
    31
  • GlboalMapper20如何把mbt转为tif

    GlboalMapper20如何把mbt转为tif一、为什么要把mbt转tifmbt是一种瓦片的单文件存储,打开浏览的速度都非常快。部分GIS软件支持度不是很好,比如ArcGIS等,用这些软件做分析的时候,无法直接基于mbt来做。就需要把mbt转为tif。二、打开mbt拖拽mbt到GlobalMapper二、导出文件选择geotiff三、导出配置选择真彩色分辨率设置:默认是导出最高级别,如果需要导出低级别的,可以自己调整分辨率范围设置:mbt经常用于存储大文件,实际分析用的范围比较小,直接设置

    2025年6月8日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号