「Poetize9」升降梯口
3056: 升降梯口
Time Limit: 2 Sec Memory Limit: 128 MB
Submit: 43 Solved: 42
[Submit][Status]
Description
一
些探险家组队去探索神秘的Nescafe之塔。经过一番周折,探险队员们终于突破了塔门,来到了Nescafe之塔的一层大殿。而探险队员们想要拜访的四
大护法和塔之圣主据传都住在塔的高层,因此他们迅速奔向了大殿一侧的升降梯口。不过由于Nescafe之塔乃是一年一度封印和开启“Nescafe之杯”
的禁地,自然不能允许外来人员随意闯入,因此要想乘坐升降梯,队员们必须破解开启升降梯动力的密码。
升降梯的密码盘是一个由n*n个方格组成的正方形(n为偶数),第i行第j列
的方格中标着数字(i-1)*n+j,而在密码盘的上面覆盖着一张同样由n*n个方格组成的挡光片。如果挖去挡光片上的n*n/4个格子,并从小到大记下
通过挖去的格子看到的n*n/4个数;然后把挡光片顺时针旋转90°、180°、270°,每次也同样记下看到的n*n/4个数;这样最终将得到n*n个
数。如果记下的这n*n个数恰好是1~n*n的一个排列,那么我们称这片挖去n*n/4个格子后的挡光片对密码盘是“精确覆盖”的。不妨用一个n*n的
01矩阵表示这张挡光片,其中挖去的格子为1,没有挖去的格子为0,那么如下图所示的挡光片就可以表示为:
0000
0000
1101
0001
定义挡光片A比挡光片B小,当且仅当A对应的01矩阵的字典序小于B对应的01矩阵的字典序(即:A和B对应的01矩阵中存在一个位置(x,y),使得矩
阵A、B中前x-1行的所有数字和第x行的前y-1个数字都相同,而A中第x行第y列的数字为0,B中第x行第y列的数字为1)。
现在升降梯口的墙上写着一个数字k,探险队员们必须迅速制作出第k小的、对密码盘“精确覆盖”的挡光片,用以在密码盘上获取n*n个数作为开启升降梯动力的密码。
Input
一行两个正整数n、k。
Output
输出满足要求的挡光片对应的01矩阵。
Sample Input
Sample Output
0000
1101
0001
HINT
测试点编号 n k
#1 =2 <=10
#2 =2 <=10^3
#3 =4 <=10
#4 =4 <=10^9
#5 =6 <=10
#6 =6 <=10^18
#7 =8 <=10
#8 =8 <=10^18
#9 =10 <=10^18
#10 =10 <=10^18
数据保证有解。
Source
题解:
刚开始看见题一直因为是神题。
后来看了题解顿时感觉自己好sb。。。
因为每一个点经过旋转可达的点是一定的,所以我们把任意可旋转达到的点分为n*n/4 个组,然后在这些组里面每个取且仅取一个就满足题意。。。
然后考虑第k小的解,就像treap里面找rank一样。。。TAT
还有一个小问题,(x,y)绕中心旋转90度以后坐标为什么?答案是(n-y+1,x)
还要注意 1<<50 会爆!
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 500+100
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int c[][],v[],ans[][],n;
ll m,t,f[];
ll calc()
{
ll ret=;
for1(i,t)if(!v[i]&&ret<2e18)ret*=f[i];
return ret;
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
cin>>n>>m;
for1(i,n)
for1(j,n)
if(!c[i][j])
{
f[++t]=;
for(int k=,x=i,y=j;k<=;k++)
swap(x,y),x=n-x+,c[x][y]=t;
}
m=((ll)<<(*t))-m+;
for1(i,n)
for1(j,n)
if(!v[c[i][j]])
{
v[c[i][j]]=;
ll tmp=calc();
if(tmp>=m)ans[i][j]=;
else m-=tmp,f[c[i][j]]--,v[c[i][j]]=;
}
for1(i,n)
{
for1(j,n)if(ans[i][j])printf("");else printf("");
printf("\n");
}
return ;
}
「Poetize9」升降梯口的更多相关文章
- TYVJ2032 「Poetize9」升降梯上
P2032 「Poetize9」升降梯上 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道, ...
- P2032 「Poetize9」升降梯上
描述 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大手柄.Nescafe之塔一共有N层,升降 ...
- TYVJ P2032 「Poetize9」升降梯上 spfa最短路
%%%暴搜出奇迹%%%@SiriusRen 其实我刚开始题读错了,才导致我写图论... spfa跑最短路,开一个node记录状态(pair当然滋磁):所在楼层和槽的位置 以层数为1,槽在0的位置 为初 ...
- 「Poetize9」礼物运送
3055: 礼物运送 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 18 Solved: 12[Submit][Status] Description ...
- 「HNOI2016」数据结构大毒瘤
真是 \(6\) 道数据结构毒瘤... 开始口胡各种做法... 「HNOI2016」网络 整体二分+树状数组. 开始想了一个大常数 \(O(n\log^2 n)\) 做法,然后就被卡掉了... 发现直 ...
- 「WC2016」挑战NPC
「WC2016」挑战NPC 解题思路 这个题建图非常厉害,带花树什么的只会口胡根本写不动,所以我写了机房某大佬教我的乱搞. 考虑把一个筐 \(x\) 拆成 \(x1,x2,x3\) 三个点,且这三个点 ...
- 「ZJOI2009」多米诺骨牌
「ZJOI2009」多米诺骨牌 题目描述 有一个n × m 的矩形表格,其中有一些位置有障碍.现在要在这个表格内 放一些1 × 2 或者2 × 1 的多米诺骨牌,使得任何两个多米诺骨牌没有重叠部分,任 ...
- 「WC2010」重建计划(长链剖分/点分治)
「WC2010」重建计划(长链剖分/点分治) 题目描述 有一棵大小为 \(n\) 的树,给定 \(L, R\) ,要求找到一条长度在 \([L, R]\) 的路径,并且路径上边权的平均值最大 \(1 ...
- 零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I
原文:零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I 本章将教大家如何更改Button的预设Template,以及如何在Button内设置 ...
随机推荐
- Gitolite轻松部署/管理git server
对于今天越来越受欢迎的Git,相信做开发的朋友都基本有所耳闻.它最大的便利就是分布式的开发库,让使用git作为源码管理库的开发者可以在本地提交代码的修改而不用提交到远程的库,同时需要和团队协作.同步代 ...
- SQL Server中的20个系统变量
1.@@CONNECTIONS返回自上次启动 Microsoft SQL Server以来连接或试图连接的次数.示例:下面的示例显示了到当前日期和时间为止试图登录的次数.SELECT GETDATE( ...
- sublime的js调试环境(基于node环境)
很多的语言都有控制台,都要专门的ide,js,用sublime在node的环境下,可以配置console, 如何配置?首先,要有node的环境,下载安装,还要安装到c盘才行,然后找到'工具(tool) ...
- 层叠样式优先级CSS
按照W3School网站(点这里直达)的说法,当同一个 HTML 元素被不止一个样式定义时,它们是有优先级之分的,如下,将优先级从小到大排列出来,其中4的优先级最高: 1.浏览器缺省设置2.外部样式表 ...
- OC中的SEL解析
OC中的SEL对象即selector对象,用来保存一个方法的地址.下面通过一个Demo来解析SEL的原理.创建一个Person类,Person.h中: #import <Foundation/F ...
- 搞一个app需要多久?
//转载文章,看后有感 我有些尴尬地拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着要进来干一场,尽管王总从事的行当也算跟IT沾边,但毕竟太长时 ...
- cocos2dx 实现华丽丽的滚动层.
前言 好久没写博客了. 前几周策划要求实现一个比较多功能的滚动层控件. 这个艰巨的任务就这样自然而然的落在了我这小身板上. 当然了, 只要我出手, 难度再高的需求也变得不堪一击. 哈哈哈哈 示例图 该 ...
- ios开发之IBOutlet和IBAction的区别
IBOutlet 输出口是使用关键字IBOutlet声明的实例变量.控制器头文件中的输出口声明应如下所示: @property (nonatomic, retain) IBOutlet UIButto ...
- Java发邮件:Java Mail与Apache Mail
作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.邮件简介 一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等: 1.收件人:收件人的邮箱地址,例 ...
- Html5-Canvas实现简易的抽奖转盘
###Html5实现抽奖转盘效果 1.实现的基本效果 2.主要的内容 html5中canvas标签的使用 jQueryRotate.js旋转插件 3.主要html代码 <body> < ...