CSU 1102 多连块拼图

多连块拼图

时间限制: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模拟,记录小矩形中*号第一次出现的位置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");
    }
}

时间: 2024-12-30 00:19:38

CSU 1102 多连块拼图的相关文章

ACM: NBUT 1105 多连块拼图 - 水题 - 模拟

NBUT 1105  多连块拼图 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format: Practice Appoint description:  System Crawler  (Aug 12, 2016 9:32:14 AM) Description 多连块是指由多个等大正方形边与边连接而成的平面连通图形. -- 维基百科 给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成.小多连块只能

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

多连块拼图 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述     多连块是指由多个等大正方形边与边连接而成的平面连通图形.         ---- 维基百科 给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成.小多连块只能平移,不能旋转或者翻转.两个小多连块不得重叠.左下图是一个合法的拼法,但右边两幅图都非法.中间那幅图的问题在于其中一个小多连块旋转了,而右图更离谱:拼在一起的那两个多连块根本就不是那个给定的小多连块(给定的小多连块

ACM--模拟--nyoj 560--多连块拼图--湖南第七届省赛

南阳oj题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=560 多连块拼图 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述     多连块是指由多个等大正方形边与边连接而成的平面连通图形.         ---- 维基百科 给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成.小多连块只能平移,不能旋转或者翻转.两个小多连块不得重叠.左下图是一个合法的拼法,但右边两幅图都非法.

拼图游戏 v1.1

原文:拼图游戏 v1.1 我一直对拼图游戏比较有兴趣,市面上卖的所谓“1000块拼图”也玩过不少,不过玩那个太占地方,后来也不再买了,同时也就萌生了在电脑上玩拼图的想法. 现在虽然有很多拼图游戏,但能大多数只能支持几十或几百块拼图,很少能支持上千块拼图的游戏. 后来,我就利用 Direct2D 自己实现了一个拼图游戏,可以流畅的支持最高 1200 块的拼图(更高其实也可以支持,但是感觉已经足够了),拼图碎片之间也可以自动吸附,还可以设置吸附到背景.游戏界面如图 1 所示. 图 1 游戏界面 一.

codeforces 377A. Puzzles 水题

A. Puzzles Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/337/A Description The end of the school year is near and Ms. Manana, the teacher, will soon have to say goodbye to a yet another class. She decided to p

微课播放器

今天给大家介绍如何制作微课视频播放器,用AppInventor制作视频播放器对很多初学者来说也是分分钟的事,因为基本上几块拼图就能搞定.相信很多人制作视频播放器会选择把视频文件上传至AppInventor的开发环境中,如果视频过大的话很显然会加重apk的负担,如果你想随时更改你的视频内容,还得重新更改视频文件,然后生成新的apk,客户端又要重新安装apk文件,这种视频播放器显然很笨重.唯一的解决办法就是将资源和客户端分离开,也就是将视频文件上传至稳定的服务器中,客户端执行播放相关的功能就好了.整

为何说 JavaScript 开发很疯狂

网络开发乐趣多多!Javascript 却……让人望而却步. 网页开发的其他所有东西都很配合,唯独到了 Javascript,你会感觉好像比别人少了一大块基础知识,完全搞不懂它. 事实就是,没错,你的确缺了几块拼图. 不过,前端开发的现状其实也很疯狂. 并不是只有你感到抓狂. 拉把椅子坐下来.该写个 Javascript 应用了. 首先要搭建和运行本地环境.是用 Gulp,还是 Grunt,都不好……还是用 NPM 脚本吧! Webpack 还是 Browserify?(不好意思地)还是 Req

地图游戏初尝

<迷宫游戏> 今天第一次做移动端地图游戏,游戏虽简,获益匪浅. 以前没做过地图游戏,一直不懂怎么构造地图和检测路径,我想这就是做web地图游戏的关键吧.慢慢地有了思路,有了常用方案,那么就算换了一个很复杂的图也不怕实现不了了.不过web app一直离不开性能问题,尤其在移动端.假如使用标签元素来构图的话(像本例),当操作的数量达到一定后,流畅度就好大打折扣.因为web app一般是无法得到硬件加速的,所以性能远不如native app.除非开启3D加速(GPU),如移动大图时使用transla

zoj 3814 Sawtooth Puzzle(隐式图搜索)

题目链接:zoj 3814 Sawtooth Puzzle 题目大意:给定一个9宫拼图,每次可以挑选一个位置顺时针旋转,和普通拼图不一样的是每块拼图周围可能有齿转动一个可能导致全部拼图转变. 解题思路:隐式图搜索,9块拼图最多49个状态,对于每个状态枚举转动的位置,考虑转动的状态.一开始转移是用bfs写的,但是由于频繁申请队列,然后时间爆了 #include <cstdio> #include <cstring> #include <queue> #include &l