【题目描述】

众所周知,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的舞女的更多相关文章

  1. dvd开发小程序

    package dvdManager8; import java.util.Scanner; public class DvdSystem8 { static String[][] dvd = new ...

  2. dvd管理系统

    >>>>>>>>>>>>>>>>>>>> 语言:java 工具:eclipse ...

  3. JAVA基础代码分享--DVD管理

    问题描述 为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理. 管理器具备的功能主要有: 1.查看DVD信息. 菜单选择查看功能,展示DVD的信息. 2.新增DVD信息 选择新增功 ...

  4. 诸城模拟赛 dvd的逆序对

    [题目描述] dvd是一个爱序列的孩子. 他对序列的热爱以至于他每天都在和序列度过 但是有一个问题他却一直没能解决 给你n,k求1~n有多少排列有恰好k个逆序对 [输入格式] 一行两个整数n,k [输 ...

  5. Mount DVD on CentOS

    Mount DVD on CentOS need to mount CD/DVD on CentOS Temporarily or Permanently? Here’s the Process Us ...

  6. 如何用Java实现DVD的一些功能

    /* 这个代码中涉及到的知识点很多,大家要慢慢悟!! */ import java.util.*; import java.text.*; class DvdSet { //定义三个属性 String ...

  7. 初始Java DVD项目

    DVDSet 类: DVD DVD    删除功能 实现DVD借出功能 DVD还回功能

  8. 初始Java 第一课程DVD项目

    DVDSet 类: DVD DVD    删除功能 实现DVD借出功能 DVD还回功能

  9. DVD管理器集合版

    利用所学的集合写出的DVD管理系统,运用到了所学到集合基础. import java.text.ParseException; import java.text.SimpleDateFormat; i ...

随机推荐

  1. 微软Hololens学院教程- Holograms 100: Getting Started with Unity【微软教程已经更新,本文是老版本】

    这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...

  2. php笔记02:整型细节说明

    1.php的一个整数可以是十进制,也可以是八进制和十六进制: 比如:$a=0123; //八进制 $a=0x1A; //十六进制 2.php的整数都是有符号的数(java也是只有有符号数) 3.在ph ...

  3. Android 自学之列表选择框Spinner

    列表选择框(Spinner)与Swing编程里面的Spinner不同,这里的Spinner其实就是一个列表选项框. Spinner是ViewGroup的间接子类,因此他也可作为容器使用. Spinne ...

  4. mysql 数据备份还原

    悲剧的一天,不小心将数据库删了... 命令行备份数据库 1.mysqldump命令进行备份.该命令将连接MySQL服务器并创建SQL转储文件,该文件包含了重新创建数据库所必需的所有SQL语句.该命令的 ...

  5. 在Linux平台上用ASP.NET 5 连接Redis服务器

    最近在做一个Linux平台上基于ASP.Net 5 中间件+Redis+Mysql架构的系统,研究使用了 StackExchange.Redis 作为asp.net5连接redis的工具.作者在前几天 ...

  6. Java阻塞中断和LockSupport

    在介绍之前,先抛几个问题. Thread.interrupt()方法和InterruptedException异常的关系?是由interrupt触发产生了InterruptedException异常? ...

  7. 本地环境phpStorm10+XDebug配置和断点调试

    安装环境:XAMPP;phpStorm版本10; windows 7 64bit. XAMPP.phpStorm 都直接安装在了D盘根目录,9999m目录建在D:\xampp\htocts下,即目录工 ...

  8. [Laravel] 获取执行的Sql

    获取数据库操作记录 $queries = DB::getQueryLog(); //取最后一条是 $lastSql = end($queries); 不过这样输出的,不是真正的sql,输出的是类似PD ...

  9. 总结html5-canvas学习笔记

    canvas是html5中很重要的一部分,我们可以用它来绘制各种平面图形, 3d图,动画等等.每每看到网上超炫的html5页面,首先立马下载下来,心里想着有一天自己也可以做出这样酷炫的效果,骚年你是不 ...

  10. Android沉浸式状态栏实现

    Step1:状态栏与导航栏半透明化 方法一:继承主题特定主题 在Android API 19以上可以使用****.TranslucentDecor***有关的主题,自带相应半透明效果 例如: < ...