zoukankan      html  css  js  c++  java
  • 「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

    4 15

    Sample Output

    0000
    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

    Poetize10

    题解:

    刚开始看见题一直因为是神题。

    后来看了题解顿时感觉自己好sb。。。

    因为每一个点经过旋转可达的点是一定的,所以我们把任意可旋转达到的点分为n*n/4 个组,然后在这些组里面每个取且仅取一个就满足题意。。。

    然后考虑第k小的解,就像treap里面找rank一样。。。TAT

    还有一个小问题,(x,y)绕中心旋转90度以后坐标为什么?答案是(n-y+1,x)

    还要注意 1<<50 会爆!

    代码:

      1 #include<cstdio>
      2 
      3 #include<cstdlib>
      4 
      5 #include<cmath>
      6 
      7 #include<cstring>
      8 
      9 #include<algorithm>
     10 
     11 #include<iostream>
     12 
     13 #include<vector>
     14 
     15 #include<map>
     16 
     17 #include<set>
     18 
     19 #include<queue>
     20 
     21 #include<string>
     22 
     23 #define inf 1000000000
     24 
     25 #define maxn 500+100
     26 
     27 #define maxm 500+100
     28 
     29 #define eps 1e-10
     30 
     31 #define ll long long
     32 
     33 #define pa pair<int,int>
     34 
     35 #define for0(i,n) for(int i=0;i<=(n);i++)
     36 
     37 #define for1(i,n) for(int i=1;i<=(n);i++)
     38 
     39 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
     40 
     41 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
     42 
     43 #define mod 1000000007
     44 
     45 using namespace std;
     46 
     47 inline int read()
     48 
     49 {
     50 
     51     int x=0,f=1;char ch=getchar();
     52 
     53     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     54 
     55     while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();}
     56 
     57     return x*f;
     58 
     59 }
     60 int c[20][20],v[500],ans[20][20],n;
     61 ll  m,t,f[500];
     62 ll calc()
     63 {
     64     ll ret=1;
     65     for1(i,t)if(!v[i]&&ret<2e18)ret*=f[i];
     66     return ret;
     67 }
     68 
     69 int main()
     70 
     71 {
     72 
     73     freopen("input.txt","r",stdin);
     74 
     75     freopen("output.txt","w",stdout);
     76 
     77     cin>>n>>m;
     78     for1(i,n)
     79      for1(j,n)
     80       if(!c[i][j])
     81       {  
     82         f[++t]=4;
     83           for(int k=1,x=i,y=j;k<=4;k++)
     84             swap(x,y),x=n-x+1,c[x][y]=t;
     85       }
     86     m=((ll)1<<(2*t))-m+1;  
     87     for1(i,n)
     88      for1(j,n)
     89        if(!v[c[i][j]])
     90        {
     91            v[c[i][j]]=1;
     92            ll tmp=calc();
     93            if(tmp>=m)ans[i][j]=1;
     94             else m-=tmp,f[c[i][j]]--,v[c[i][j]]=0;
     95        }
     96     for1(i,n)
     97     {
     98      for1(j,n)if(ans[i][j])printf("1");else printf("0");
     99      printf("
    ");
    100     }
    101 
    102     return 0;
    103 
    104 }
    View Code
  • 相关阅读:
    HTML DOM Body vLink 属性
    HTML <dialog> 标签
    JavaScript atan() 方法
    HTML URL 编码参考手册
    HTML DOM dir 属性
    CSS3 小黄人案例
    CSS 之 圣杯布局&双飞翼布局
    CSS3 渐变
    浏览器前缀
    CSS3 弹性盒布局
  • 原文地址:https://www.cnblogs.com/zyfzyf/p/4053891.html
Copyright © 2011-2022 走看看