dvd的舞女
【题目描述】
众所周知,dvd是一个爱做梦的好孩子。
但是不知道为什么最近dvd总是梦到一群舞女
众所周知,dvd是一个爱琢磨的好孩子。
但是不知道为什么dvd最近一直想不明白为什么
终于dvd发现了梦境的规律,所有舞女在一个n*n的大方格上跳舞,大方格上的一些位置可以占人,其他位置不行。每时每刻都有一个舞女在一个可以占人的位置跳舞。
过一段时间,每个舞女都会对于自己前方,左方,右方三分方向看一下,如果有且仅有一个位置可以站人,她就会朝哪个方向转身并(如果是前面就不转身了)移动到那个位置,否则就会因为无路可走或者选择困难综合征挂掉。也不能有两个舞女同时出现在一个位置上(这样她们会打架).
但是同样的,再不能站人的位置,会有一堆跳舞机器人做着和舞女同样的事情(smg?)
dvd是一个友善的好孩子,众所周知。所以dvd非常不希望看到舞女或者机器人挂掉或者打架。
Dvd是一个聪明的好孩子,众所周知。所以dvd想要知道,如果用E表示可以站立(这里有舞女),.(英文的句点,编码46) 表示不可以站立(这里有机器人),那么字典序第k大的合法舞台。如果合法的不存在k个,输出-1否则输出方案
【输入格式】
读入n,k
【输出格式】
如果k个及以上的方案,输出字典序第k的方案,否则输出-1
【样例输入1】
4 1
【样例输出1】
....
.EE.
.EE.
....
【样例输入2】
5 5
【样例输出2】
-1
【数据范围和约定】
对于30%的数据 n<=10
对于另外30%的数据,k<=10
对于100%的数据n<=100,k<=10^15
【解题思路】
这是大神的原创题,刚开始看我觉得是分治,再看觉得是图论,最后你告诉我是搜索,你逗我玩呢?
这个题你会发现一个问题,只有每一个点的四周总会有两个点与他相同才能满足条件,其实也很好理解,舞女或者机器人从一个方向跳过来,在跳向另一个方向,所以只要确定第一行就能确定全部,问题的关键就是如何确定第一行,老湿告诉我你只需要把k-1的二进制求出来,个数*2,然后从后往前填把1填'E',0填‘.’,为什么?老湿告诉我我你多花几个图就知道了。。。呵呵哒,大神就是大神,不多解释
默默地贴一下代码
- program dancer;
- const dx:array[..] of longint=(,,-,);
- dy:array[..] of longint=(,,,-);
- var f:array[..,..] of longint;
- i,j,k,n:Longint;
- a:array[..] of longint;
- function cha(w:longint):longint;
- begin
- if w= then exit();
- if w= then exit();
- end;
- function pd:boolean;
- var i,j:longint;
- begin
- for i:= to n do
- for j:= to n do if f[i,j]=- then exit(false);
- exit(true);
- end;
- procedure print;
- var i,j:longint;
- begin
- for i:= to n do
- begin
- for j:= to n do write(f[i,j]);
- writeln;
- end;
- halt;
- end;
- procedure dfs(x,y:longint);
- var i,k,j,sum:longint;
- begin
- for i:= to do
- if (x+dx[i]>=) and (dy[i]+y>=) and(y+dy[i]<=n) and(x+dx[i]<=n) and(f[x+dx[i],y+dy[i]]=-) then
- begin
- for j:= to do
- begin
- sum:=;
- f[x+dx[i],y+dy[i]]:=j;
- for k:= to do
- if (x+dx[k]>=) and (dy[k]+y>=) and(y+dy[k]<=n) and(x+dx[k]<=n) then
- if f[x+dx[k],y+dy[k]]=f[x,y] then inc(sum);
- if sum> then continue else dfs(x+dx[i],dy[i]+y);
- if pd then print;
- f[x+dx[i],y+dy[i]]:=-;
- end;
- end;
- end;
- begin
- read(n,k);
- fillchar(f,sizeof(f),byte(-));
- k:=k-;
- while k> do
- begin
- inc(i);
- a[i]:=k mod ;
- k:=k div ;
- end;
- if (n mod <>) or (*i>n) then
- begin
- write('-1');
- halt;
- end;
- for j:=i downto do
- begin
- f[,j*]:=a[j];
- f[,j*-]:=a[j];
- end;
- for i:= to n do if f[,i]=- then f[,i]:=;
- dfs(,);
- for i:= to n do
- begin
- for j:= to n do
- if f[i,j]= then write('E') else write('.');
- writeln;
- end;
- end.
dvd的舞女的更多相关文章
- dvd开发小程序
package dvdManager8; import java.util.Scanner; public class DvdSystem8 { static String[][] dvd = new ...
- dvd管理系统
>>>>>>>>>>>>>>>>>>>> 语言:java 工具:eclipse ...
- JAVA基础代码分享--DVD管理
问题描述 为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理. 管理器具备的功能主要有: 1.查看DVD信息. 菜单选择查看功能,展示DVD的信息. 2.新增DVD信息 选择新增功 ...
- 诸城模拟赛 dvd的逆序对
[题目描述] dvd是一个爱序列的孩子. 他对序列的热爱以至于他每天都在和序列度过 但是有一个问题他却一直没能解决 给你n,k求1~n有多少排列有恰好k个逆序对 [输入格式] 一行两个整数n,k [输 ...
- Mount DVD on CentOS
Mount DVD on CentOS need to mount CD/DVD on CentOS Temporarily or Permanently? Here’s the Process Us ...
- 如何用Java实现DVD的一些功能
/* 这个代码中涉及到的知识点很多,大家要慢慢悟!! */ import java.util.*; import java.text.*; class DvdSet { //定义三个属性 String ...
- 初始Java DVD项目
DVDSet 类: DVD DVD 删除功能 实现DVD借出功能 DVD还回功能
- 初始Java 第一课程DVD项目
DVDSet 类: DVD DVD 删除功能 实现DVD借出功能 DVD还回功能
- DVD管理器集合版
利用所学的集合写出的DVD管理系统,运用到了所学到集合基础. import java.text.ParseException; import java.text.SimpleDateFormat; i ...
随机推荐
- 手把手教你使用UICollectionView写公司的项目
在很多app中都有这样通用的页面,一直没有机会使用UICollectionView,只是简单的看过他的使用方法.今天公司美工出图,使用了他,并且遇到了好多的坑.记录一下过程,不确定使用的方法是不是最优 ...
- Asp.Net 之 缓存机制
asp.net缓存有三种:页面缓存,数据源缓存,数据缓存. 一.页面缓存 原理:页面缓存是最常用的缓存方式,原理是用户第一次访问的时候asp.net服务器把动态生成的页面存到内存里,之后一段时间再有用 ...
- MySQL(4):数据表创建
数据库是表的容器,表,必须属于某个数据库. 可以通过.语法,指明数据表所属的数据库 比如:database.table 进行表操作的时候,都会指定当前的默认数据库. use db_name; 1.创建 ...
- IIS7下w3wp.exe进程CPU100%问题解决办法
IIS下经常会出现w3wp.exe进程的CPU使用率达到100%的情况,在IIS7出现之前,要想确定问题所在,可以通过WinDbg来调试分析,但整个过程对技术水平要求非常高,可以参考http:// ...
- WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】
一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的ke ...
- 【高级JEE技术】JMX
JMX即Java Manager Extentin(java 管理扩展)一种动态改变javabean属性值的技术,具体应用场景可以有很多.比如使用JMX作为线上应用的开关,在做一些新老系统改造的时候 ...
- Dremel made simple with Parquet
http://lastorder.me/tag/parquet.html https://blog.twitter.com/2013/dremel-made-simple-with-parquet 对 ...
- sublime 安装 Terminal 使用 cmder
在 packagecontrol.io 可以找到 Terminal. 在 cmder.net 下载 cmder 复制 Terminal.sublime-settings 文件到 C:\Users\WX ...
- 第36条:坚持使用Override注解
@Override 注解只能用在方法声明中,表示被注解的方法声明覆盖了超类型中的一个声明. @Target(ElementType.METHOD) @Retention(RetentionPolicy ...
- 基于bootstrap3的 表格和分页的插件
如题 样式呢就是bootstrap3 的 功能呢就是实现表格和分页 (以上废话) 本来是自己没事儿写的一个js插件,曾经搁浅了一阵子,但最近由于公司项目的原因也需要这样的一个插件,所以就捡起来做了个可 ...