uva-519-拼图
给你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-拼图的更多相关文章
- Puzzle (II) UVA - 519
题目链接: https://vjudge.net/problem/UVA-519 思路: 剪枝+回溯 这个题巧妙的是他按照表格的位置开始搜索,也就是说表格是定的,他不断用已有的图片从(0,0)开始拼到 ...
- UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据
题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短. 由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了. 全排列用next_per ...
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
- JavaScript版拼图小游戏
慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...
- 利用Vue.js实现拼图游戏
之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...
- PIC12F508/505/509/510/506/519/526/527单片机破解芯片解密方法!
IC芯片解密PIC12F508/505/509/510/506/519/526/527单片机破解 单片机芯片解密型号: PIC12F508解密 | PIC12F505解密 | PIC12F506解密 ...
- WPF学习系列 游戏-选张图片做成9宫格拼图
今天要学习一个拼图项目. 目标是传入一张图片,然后将它分成9份,去掉一份,鼠标点击进行拼图. 源文件结构很简单 第一步.新建项目 这一步没什么好说的,新建一个项目就跟源文件结构一样了 第二步.页面布局 ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
随机推荐
- Qsys 设计流程---Qsys System Design Tutorial
Qsys 设计流程 ---Qsys System Design Tutorial 1.Avalon-MM Pipeline Bridge Avalon-MM Pipeline Bridge在slave ...
- Windows 消息【二】窗口函数
前一篇文章讲到非队列消息会直接把消息Dispatch到窗口函数上,窗口函数长什么样? //就是一个大case分支 //要想拦截消息,override窗口函数是一个办法! procedure TCust ...
- [NEWS]Microsoft expands partnerships with AOL and AppNexus, Bing to power search for AOL properties
http://advertising.microsoft.com/en/blog/33906/microsoft-expands-partnerships-with-aol-and-appnexus- ...
- 帆软:不使用 __parameters__ 传参,问题。
原帖地址:http://bbs.fanruan.com/thread-117614-1-1.html 在设计器本地可以用下面方式传参数,这个方式跟 &userID=28 的结果是一样的. Re ...
- DS树+图综合练习--带权路径和
题目描述 计算一棵二叉树的带权路径总和,即求赫夫曼树的带权路径和. 已知一棵二叉树的叶子权值,该二叉树的带权案路径和APL等于叶子权值乘于根节点到叶子的分支数,然后求总和.如下图中,叶子都用大写字母表 ...
- what's the difference between grouping and facet in lucene 3.5
I found in lucene 3.5 contrib folder two plugins: one is grouping, the other is facet. In my option ...
- Ngui Tween 组合动画 group
使用NGUI的Tween做补间动画,难免会涉及组合各种Tween.最常用的就是 Scale+Alpha组合 做淡入淡出了.那么如何控制 播放完一个Tween 后在 播放另一个Tween呢? 利用del ...
- bzoj5052: 繁忙的财政官
求区间内相差最小的两个数的差 分sqrt(n)块,预处理两个数在块内,以及一个数在块内一个数在零散部分的情况,询问时归并排序处理两个数都在零散部分的情况,时间复杂度$O((n+q)\sqrt{n})$ ...
- java浅析final关键字
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...
- jQuery插件制作之全局函数用法实例
原文地址:http://www.jb51.net/article/67056.htm 本文实例讲述了jQuery插件制作之全局函数用法.分享给大家供大家参考.具体分析如下: 1.添加新的全局函数 所谓 ...