给你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. ESP8266 ESP-01调试方法

    1. 用AMS1117搭建一个3.3V输出的电路 2. ESP8266 ESP-01接线 只要连接UTXD.GND.CH_PD.VCC.URXD这五个管脚就可以直接使用了. 注意的是CH_PD要接高电 ...

  2. 【MySQL】批量数据循环插入

    双重循环插入 DELIMITER ;; CREATE PROCEDURE test_insert() BEGIN ; ; ) DO -- repeat ; -- select a; ) DO ); ; ...

  3. JavaScript学习总结(二、隐式类型转换、eval())

    一.(避免)隐式类型转换 console.log(false == 0);   //logs true; console.log(false === 0);   //logs false; conso ...

  4. Excel技巧--让折线图带面积更直观生动

    上图为带面积的折线图,比单纯的折线图更直观更好看. 制作办法: 1.先制作纯折线图: 2.再复制一遍数据列,选中图表,点击粘贴(ctrl+v): 3.右键图表,点击“更改图表类型”,对话框如下设置: ...

  5. table thead 置顶

    table tbody { display:block; max-height:300px; overflow-y:scroll;}table thead, tbody tr { display:ta ...

  6. uoj#187. 【UR #13】Ernd

    http://uoj.ac/problem/187 每个点只能从时间,b+a,b-a三维都不大于它的点转移过来,将点按时间分成尽量少的一些段,每段内三维同时非严格单调,每段内的点可能因为连续选一段而产 ...

  7. 服务注册发现consul之二:在Spring Cloud中使用Consul实现服务的注册和发现

    首先安装consul环境,参照之前的文章:<服务注册发现consul之一:consul介绍及安装>中的第一节介绍. Spring Cloud使用Consul的服务与发现 1.导入依赖pri ...

  8. [UE4]在AIController中使用行为树

     行为树会在Root根下面的每个子节点中从左右到右来回往复循环执行.

  9. YzmCMSV3.1 | 代码审计

    YzmCMSV3.1 | 代码审计 这次审计 yzmcms . YzmCMS采用OOP(面向对象)方式自主开发的框架.框架易扩展,是一款高效开源的内容管理系统,产品基于PHP+Mysql架构,可运行在 ...

  10. tf.while_loop

    tf.while_loop(cond, body, loop_vars, shape_invariants=None, parallel_iterations=10, back_prop=True, ...