[TJOI2014]拼图
嘟嘟嘟
一眼看上去像状压dp,然后越想复杂度越不对劲,最后发现和爆搜差不多,索性就写爆搜了,复杂度\(O(\)能过\()\)。
别忘了填拼图和回溯的时候只动拼图中是1的部分,不要把\(n * m\)的矩形全改了。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define In inline
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 17;
const int N = 4;
inline ll read()
{
ll ans = 0;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) last = ch, ch = getchar();
while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < 0) x = -x, putchar('-');
if(x >= 10) write(x / 10);
putchar(x % 10 + '0');
}
int n;
struct Puzzle
{
int n, m, num;
char a[maxn][maxn];
}t[maxn];
In void calc(int x)
{
for(int i = 1; i <= t[x].n; ++i)
for(int j = 1; j <= t[x].m; ++j)
if(t[x].a[i][j] == '1') ++t[x].num;
}
int f[maxn][maxn], Ans[maxn][maxn], Flg = -1;
In void copy_ans()
{
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= N; ++j) Ans[i][j] = f[i][j];
}
In bool check(int now, int x, int y)
{
for(int i = x; i <= x + t[now].n - 1; ++i)
for(int j = y; j <= y + t[now].m - 1; ++j)
if(f[i][j] && t[now].a[i - x + 1][j - y + 1] == '1') return 0;
return 1;
}
In void copy(int now, int x, int y, bool flg)
{
for(int i = 1; i <= t[now].n; ++i)
for(int j = 1; j <= t[now].m; ++j)
if(t[now].a[i][j] == '1')
f[i + x - 1][j + y - 1] = flg ? now : 0;
}
In void dfs(int now)
{
if(Flg > 0) return;
if(now == n + 1) {++Flg; copy_ans(); return;}
for(int i = 1; i <= N - t[now].n + 1; ++i)
for(int j = 1; j <= N - t[now].m + 1; ++j)
if(check(now, i, j))
{
copy(now, i, j, 1);
dfs(now + 1);
copy(now, i, j, 0);
}
}
int main()
{
while(scanf("%d", &n) != EOF)
{
Flg = -1; Mem(f, 0);
int sum = 0;
for(int i = 1; i <= n; ++i)
{
t[i].n = read(), t[i].m = read(); t[i].num = 0;
for(int j = 1; j <= t[i].n; ++j) scanf("%s", t[i].a[j] + 1);
calc(i); sum += t[i].num;
}
if(sum ^ 16) {puts("No solution"); continue;}
dfs(1);
if(Flg == -1) puts("No solution");
else if(Flg > 0) puts("Yes, many!");
else
{
puts("Yes, only one!");
for(int i = 1; i <= N; ++i)
{
for(int j = 1; j <= N; ++j) write(Ans[i][j]);
enter;
}
}
}
return 0;
}
[TJOI2014]拼图的更多相关文章
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
- JavaScript版拼图小游戏
慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...
- 利用Vue.js实现拼图游戏
之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...
- WPF学习系列 游戏-选张图片做成9宫格拼图
今天要学习一个拼图项目. 目标是传入一张图片,然后将它分成9份,去掉一份,鼠标点击进行拼图. 源文件结构很简单 第一步.新建项目 这一步没什么好说的,新建一个项目就跟源文件结构一样了 第二步.页面布局 ...
- 原生js完成拼图小游戏
废话不说,看代码,图片可以自己找,我这直接引用了百度的了 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml ...
- ACM: NBUT 1105 多连块拼图 - 水题 - 模拟
NBUT 1105 多连块拼图 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format: Practice Appoint ...
- JavaScript拼图游戏
今天是2016年最后一天上班了.最近几天都比较休闲,有时间空闲下来写写文档之类的. 2016过得真是快.感觉没做什么就过去了.想到之前想坚持每个月写一写博客都没坚持到.希望2017年可以吧. 无聊之余 ...
- MyFirstgame 拼图
package auto; /** * IDA*求解15puzzle问题 * IDA*整合了IDDFS和A*算法.其中IDDFS控制了求解过程中的内存开销,A*算法意味着"启发式" ...
- 关于有偿提供拼图响应式后台的通知---------pintuer ui的官方通知(www.pintuer.com)
拼图响应式前端框架版响应式后台正式发布. 考虑到目前拼图的状况,我们不打算免费开放下载,但也不会收各位朋友1分钱,该版后台将有偿提供给各位给予拼图贡献的朋友. 废话不多说,一切皆以有图有真相,下面上图 ...
随机推荐
- js异步编程终级解决方案 async/await
在最新的ES7(ES2017)中提出的前端异步特性:async.await. async.await是什么 async顾名思义是“异步”的意思,async用于声明一个函数是异步的.而await从字 ...
- JavaScript是如何工作的:事件循环和异步编程的崛起 + 5种使用 async/await 更好地编码方式!
摘要: 深度理解JS事件循环!!! 原文:JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式! 作者:前端小智 Fundebug经授权转载, ...
- angular 去掉url里面的#
1.适合客户端的方法,但是页面不能刷新,一刷新就404 (1)在index.html里添加 <base href="/"> (2)在app.js的config里,注入$ ...
- JS实现缓动效果-让div运动起来
var tween = { linear:function(t,b,c,d){ return c*t/d + b; }, easeIn:function(t,b,c,d){ return c * ( ...
- JS之innerHTML,innerText,outerHTML,textContent的用法与区别
示例html代码: <div id="test"> <span style="color:red">test1</span> ...
- 快速上手ABP - Angular部分 - 如何最快速度了解相关API。
不是google,不是angular官网,而是在Visual Studio Code选中这个API对象,鼠标右键,选"Go to Definition" 例子:要想了解FormGr ...
- NDK时间测量
在NDK中测量时间,有四种方法. LINUX系统方法 gettimeofday 以秒和微秒的形式返回自从Epoch(1970-01-01 00:00:00 +0000 (UTC))时间以来,系统已经经 ...
- Android Studio 无法预览xml布局视图:failed to load AppCompat ActionBar with unkNown error
问题如下: 解决方法: 找到res-->values-->styles.xml 文件 可以看到主题Them设置如下: 修改为: 界面预览可以正常显示
- IDEA基于Maven Struts2搭建配置及示例
1.web.xml加载struts框架即过滤器,要注意struts版本不同过滤器配置也不同. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems ...
- <自动化测试方案_4>第四章、选型标准
第四章.选型标准 1,免费 2,工具可维护.可扩展 3,支持团队工作