给你N*M个碎片,问能否用他们拼成一个矩形,矩形的边缘要全是F,除外界边缘的边要么是I,要么O,不能是F
1.碎片会重复出现,所以同样的碎片在同一个位置,如果已经不能放,直接跳过就行
2.矩形的边缘要全是F,除外界边缘的边要么是I,要么O,所以有I的数量等于0数量,上外边界F数量等于M,其他三边同理

WA了N遍

#include <stdio.h>
#include<iostream>
#include <string.h>
#include<memory.h>
using namespace std;
int N;
int M;
int flag;
int num[];
char noPeat[][];
int nl = ;
char m[][][];
int read()
{
char str[]={};
int IN[] = { };
int ON[] = { };
int FN[] = { };
gets(str);
for(int i = ; i < N * M; i++)
{
gets(str);
int ok = ;
for(int j = ; j < nl; j++)
if(noPeat[j][] == str[] && noPeat[j][] == str[]
&& noPeat[j][] == str[] && noPeat[j][] == str[])
{
ok = ;
num[j]++;
break;
}
if(ok)
{
noPeat[nl][] = str[];
noPeat[nl][] = str[];
noPeat[nl][] = str[];
noPeat[nl][] = str[];
num[nl]++;
nl++;
}
for(int j = ; j < ; j++)
{
if(str[j] == 'I')
IN[j]++;
if(str[j] == 'O')
ON[j]++;
if(str[j] == 'F')
FN[j]++;
}
}
if(FN[] != M || FN[] != M)
return ;
if(FN[] != N || FN[] != N)
return ;
if(IN[] != ON[] || IN[] != ON[])
return ;
if(IN[] != ON[] || IN[] != ON[])
return ;
return ;
}
int check(int r, int c, char str[])
{
if(r == && str[] != 'F')
return ;
if(r == N && str[] != 'F')
return ;
if(c == && str[] != 'F')
return ;
if(c == M && str[] != 'F')
return ;
if(r != && str[] == 'F')
return ;
if(r != N && str[] == 'F')
return ;
if(c != && str[] == 'F')
return ;
if(c != M && str[] == 'F')
return ;
if(m[r][c - ][] == 'I' && str[] != 'O')
return ;
if(m[r][c - ][] == 'O' && str[] != 'I')
return ;
if(m[r - ][c][] == 'I' && str[] != 'O')
return ;
if(m[r - ][c][] == 'O' && str[] != 'I')
return ;
return ;
}
void dfs(int r, int c)
{
if(c == M + )
dfs(r + , );
if(flag)
return;
if(r == N + )
{
flag = ;
return;
}
for(int i = ; i < nl; i++)
{
if(num[i] && check(r, c, noPeat[i]))
{
num[i]--;
m[r][c][] = noPeat[i][];
m[r][c][] = noPeat[i][];
m[r][c][] = noPeat[i][];
m[r][c][] = noPeat[i][];
dfs(r, c + );
if(flag)
return;
m[r][c][] = ;
m[r][c][] = ;
m[r][c][] = ;
m[r][c][] = ;
num[i]++;
} } }
int main()
{
freopen("d://1.txt", "r", stdin);
while (cin >> N >> M && (N + M))
{
flag = ;
nl = ;
memset(num, , sizeof(num));
memset(m, , sizeof(m));
memset(noPeat, , sizeof(noPeat));
int ok = read();
if(!ok)
{
cout << "NO" << endl;
continue;
}
dfs(, );
if(flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return ;
}

uva-519-拼图的更多相关文章

  1. Puzzle (II) UVA - 519

    题目链接: https://vjudge.net/problem/UVA-519 思路: 剪枝+回溯 这个题巧妙的是他按照表格的位置开始搜索,也就是说表格是定的,他不断用已有的图片从(0,0)开始拼到 ...

  2. UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据

    题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短. 由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了. 全排列用next_per ...

  3. 拼图小游戏之计算后样式与CSS动画的冲突

    先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...

  4. JavaScript版拼图小游戏

    慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...

  5. 利用Vue.js实现拼图游戏

    之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...

  6. PIC12F508/505/509/510/506/519/526/527单片机破解芯片解密方法!

    IC芯片解密PIC12F508/505/509/510/506/519/526/527单片机破解 单片机芯片解密型号: PIC12F508解密 | PIC12F505解密 | PIC12F506解密  ...

  7. WPF学习系列 游戏-选张图片做成9宫格拼图

    今天要学习一个拼图项目. 目标是传入一张图片,然后将它分成9份,去掉一份,鼠标点击进行拼图. 源文件结构很简单 第一步.新建项目 这一步没什么好说的,新建一个项目就跟源文件结构一样了 第二步.页面布局 ...

  8. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  9. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  10. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

随机推荐

  1. Win10+Ubuntu1604双系统

    原本电脑有一块固态硬盘和机械硬盘,用来跑win10的,现在想直接在ubuntu上跑tensorflow,所以加了块320G的机械硬盘单独跑ubuntu. 一.准备 1.ubuntu-16.04.3-d ...

  2. linux 查看系统磁盘、内存大小

    1.磁盘 df -h cat /proc/partitions 2.内存 cat /proc/meminfo cat /proc/meminfo

  3. responsiveslides 插件(图片轮播插件)

    参数详解: $(".rslides").responsiveSlides({ auto: true, // Boolean: 设置是否自动播放, true or false spe ...

  4. java实现PC之间的udp数据单向传输

    本示例包括两个客户端UDPClient和MyServer.UDPClient发送数据到MyServer,MyServer负责接收数据.可传输文本.视频.音频.图片等. 最近我在学习这一块,写个例子. ...

  5. 【占位符替换】替换String中的占位符标志位{placeholder}

    概述 占位符替换, 占位符表示为:{placeholder}; 示例:替换如下{xxx}占位符中的内容 "名字:{name},年龄:{age},学校:{school}" 提供了两种 ...

  6. VisualSVNServer 无法启动 could not log pid to file

    启动SVN时候报了错误,然后查看日志发现报了如下错误 VisualSVNServer.exe: could not log pid to file C:/Windows/ServiceProfiles ...

  7. ubuntu16.04下sublime text 3之安装和配置

    1.安装方法 1)使用ppa安装 sudo add-apt-repository ppa:webupd8team/sublime-text-3 sudo apt-get update sudo apt ...

  8. Java学习——包及可见性

    1.在同一个类中:创建的对象,不管成员的可见修饰符可以直接调用. package studentpackage; public class Student { public long id; prot ...

  9. Java-Runoob-高级教程-实例-方法:07. Java 实例 – instanceOf 关键字用法

    ylbtech-Java-Runoob-高级教程-实例-方法:07. Java 实例 – instanceOf 关键字用法 1.返回顶部 1. Java 实例 - instanceof 关键字用法   ...

  10. 开启BBR加速

    在linux里用 wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh chmod +x b ...