bzoj5156 [Tjoi2014]拼图

原创 2018年04月15日 22:33:22

http://www.elijahqi.win/archives/3105
Description

小Z最近迷上了拼图游戏,然而智商有限,他总是无法拼出完整图案。游戏是这样的:首先小Z会得到一些拼图碎片
,然后他试着重新排列这些碎片使得它们组成一个大小为4*4的正方形。如下图。注意小Z不能旋转或者翻转这些碎
片。

小Z得到如图1的碎片,然后经过重新排列得到图2的正方形。由于小Z实在太笨了,聪明的你请写一个程序帮助他来
解决这个问题吧。

Input

输入包含多组数据,请使用EOF。
每组数据的的第一行包含一个正整数N,表示碎片的个数。
接下来输入N个碎片。每个碎片的第一行是两个正整数r和c,表示这个碎片的行数和列数。
接下来是r行,每一行包含c个字符’0’或’1’
’1’表示碎片占据这个位置,’0’表示该位置为空。
数据保证每个碎片都是完整的一片(即’1’是相互连通的),并且没有行或者列全部为’0’。
N<=16

Output

如果无法组成一个正方形,输出”No Solution”;
如果有多组解,输出”Yes,many!”。否则,输出”Yes, only one!”
接下来输出一个 4 * 4 的矩阵 H,Hij表示位置 i, j 的碎片编号。碎片编号从 1 开始
Sample Input

4
2 3
111
101
4 2
01
01
11
01
2 1
1
1
3 2
10
10
11
4
1 4
1111
1 4
1111
1 4
1111
1 4
1111
Sample Output

Yes, only one!
1112
1412
3422
3442
Yes, many!
HINT

Source

被自己sb剪枝wa了两个小时 tmd!

因为要求每个都必须出现所以非常容易就枚举状态暴力搜索即可

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=20;
bool p[N][5][5];
int ans,T,n,m,st[N][3],_ans[5][5],mp[5][5];
char s[5];
inline bool check(){
    for (int i=1;i<=4;++i)
        for (int j=1;j<=4;++j) if (!mp[i][j]) return 0;
    return 1;
}
inline void dfs(int now){
    if (ans>=2) return;
    if (now>T){if (!check())return;++ans;memcpy(_ans,mp,sizeof(mp));return;}
    for (int ii=st[now][1];ii<=4;++ii){
        for (int jj=st[now][2];jj<=4;++jj){
            bool flag=0;int x=0,y=0;
            for (int i=ii-st[now][1]+1;i<=ii;++i){y=0;++x;
                for (int j=jj-st[now][2]+1;j<=jj;++j){++y;
                    if (p[now][x][y]&&mp[i][j]) {flag=1;break;}
                }
                if(flag) break;
            }if (flag) continue;x=0;y=0;
            for (int i=ii-st[now][1]+1;i<=ii;++i){++x;y=0;
                for (int j=jj-st[now][2]+1;j<=jj;++j){++y;
                    if (p[now][x][y]) mp[i][j]=now;
                }
            }
            dfs(now+1);x=0;y=0;
            for (int i=ii-st[now][1]+1;i<=ii;++i){++x;y=0;
                for (int j=jj-st[now][2]+1;j<=jj;++j){++y;
                    if (p[now][x][y]) mp[i][j]=0;
                }
            }if(ans>=2) break; 
        }if(ans>=2) break;
    }
}
int main(){
    freopen("bzoj5156.in","r",stdin);
    while(~scanf("%d",&T)){
        memset(mp,0,sizeof(mp));ans=0;memset(p,0,sizeof(p));
        for (int owo=1;owo<=T;++owo){
            scanf("%d%d",&st[owo][1],&st[owo][2]);
            for (int i=1;i<=st[owo][1];++i){
                scanf("%s",s+1);
                for (int j=1;j<=st[owo][2];++j) p[owo][i][j]=s[j]-'0';
            }
        }dfs(1);
        if(!ans) {puts("No solution");continue;}
        if (ans==1){
            puts("Yes, only one!");
            for (int i=1;i<=4;++i) {
                for (int j=1;j<=4;++j) printf("%d",_ans[i][j]);
                puts("");
            }continue;
        }puts("Yes, many!");
    }
    return 0;
}
版权声明:辣鸡蒟蒻的blog https://blog.csdn.net/elijahqi/article/details/79954496

【TJOI2014】拼图(puzzle)

DescriptionInputOutputSample Input4 2 3 111 101 4 2 01 01 11 01 2 1 1 1 3 2 10 10 11 ...
  • ypxrain
  • ypxrain
  • 2017-03-28 20:47:23
  • 131

【TJOI2014】拼图(puzzle) dancing links X

描述小 Z 最近迷上了拼图游戏,然而智商有限,他总是无法拼出完整图案。游戏是这样的:首先小 Z 会得到一些拼图碎片,然后他试着重新排列这些碎片使得它们组成一个大小为 4 ∗ 4 的正方形。如下图。注意...
  • qq_35866453
  • qq_35866453
  • 2017-03-25 15:04:25
  • 203

3741. TJOI2014 拼图

题目大意 给定n个拼图碎片,现在要用这些碎片拼出一个4×4的正方形,要求每个碎片都被用到。若只有一组解,输出方案。 Data Constraint n≤16...
  • Akak__ii
  • Akak__ii
  • 2017-03-30 12:26:40
  • 359

【jzoj3741】【TJOI2014】【拼图(puzzle)】【搜索】

题目大意解题思路把填放状态压成二进制,直接搜索即可。code#include #include #include #include #include #define LF double #define...
  • chunkitlau
  • chunkitlau
  • 2017-03-25 14:34:28
  • 255

bzoj5154~bzoj5159 【TJOI2014】

bzoj5154 (Day1T1)匹配 【题意】 左右各nnn个点的二分图,求完美匹配的交集 【数据范围】 n≤80n≤80n\leq80 【思路】 求出一个完美匹配,再枚举完美匹配上每条...
  • leolyun
  • leolyun
  • 2018-02-12 10:57:40
  • 1364

【TJOI2014】匹配

Description对于100%的数据,N
  • lyd_7_29
  • lyd_7_29
  • 2017-03-29 21:05:10
  • 525

JZOJ 3741. 【TJOI2014】拼图

DescriptionInputOutputSample Input42 31111014 2010111012 1113 210101141 411111 411111 411111 4111141...
  • liyizhixl
  • liyizhixl
  • 2017-03-29 19:35:06
  • 186

【JZOJ 3739】【TJOI2014】匹配

Description求一个二分图的最大费用最大流,并且求出哪些点必需要选。 n
  • HOWARLI
  • HOWARLI
  • 2017-03-25 15:00:59
  • 274

tjoi2014二试试题、测试数据、选手程序、解题报告、标程

  • 2016年02月24日 18:17
  • 5.29MB
  • 下载

[JZOJ3743] 【TJOI2014】Alice and Bob

Description N
  • hzj1054689699
  • hzj1054689699
  • 2017-04-05 19:55:30
  • 550
收藏助手
不良信息举报
您举报文章:bzoj5156 [Tjoi2014]拼图
举报原因:
原因补充:

(最多只允许输入30个字)