「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内设置 ...
随机推荐
- [转] 考验你的JavaScript底细
http://sentsin.com/ 尽管今日的JavaScript已经突飞猛进,但JS的许多特性仍然保留,以下题目并不是有意设坑,许多地方将验证你的JS底细,如果错了一半,请别告诉我你从事前端. ...
- Android进阶笔记03:Android应用中实现查看"附近的人"的功能
1. 要实现" 附近的人" 这功能,然后就研究了下: (1)首先要做的就是要获取到自己当前位置的经纬度(编程获取手机GPS定位模块的信息,进而获取自己当前位置的经纬度) (2)然后 ...
- css 权威指南笔记(一)
零零散散接触css将近5年,俨然已经成为一个熟练工.如果不是换份工作,我不知道自己差的那么远:在qunar的转正review中我这种“知其然而不知其所以然” 的状况被标明,我才意识到我已停步不前近两年 ...
- windows10UWP:Segoe MDL2 图标指南
windows10 UWP 开发中,图标的使用非常广泛.为此,微软建议大家使用 Segoe MDL2 Assets 字体来获取图标.Segoe MDL2 Assets 包括了哪里图标,微软在 http ...
- 蓝牙代理报错:invalid handle error
错误症状: -(void)peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCh ...
- linux的grep命令
参考文档如下: linux grep命令 grep abb15455baeb4b23ab47540272ec47eb epps-sas.log | grep operateSettleBill exp ...
- VS2015升级Update2之后Cordova程序提示:此应用程序无法在此电脑上运行
VS2015在升级到Update2之后,有可能出现如下异常,在运行Cordova项目时提示: 查看输出面板会有乱码错误信息: 出现此问题的原因是在于npm程序损坏了.vs调用的npm程序并不是在nod ...
- MySQL命令行下查看运行状态
查看MySQL的运行状态用命令行的show语句show status是查看MySQL运行情况,和上面那种通过pma查看到的信息基本类似. show variables是查看MySQL的配置参数,还可以 ...
- C++函数二义性问题,我怎么感觉编译器有偷懒嫌疑!!!
瞎扯一段,讲得不一定对.纯属学习! struct BB{ void a(){ cout << "bb's a()\n"; }}; struct B1 : public ...
- 常见ORACLE错误,及解决方案(遇则即时更新)
1.当登陆时提示“ORA-03113:通信通道的文件结束”时: 解决方案: 需在X:\oraclexe\app\oracle\product\10 ...