BZOJ1298[SCOI2009]骰子的学问
Description

Input
第一行为两个整数n, m。第二行有n个整数,为a1,a2, …, an。
Output
包含n行,每行m个1~n×m的正整数,各不相同,以空格分开。如果有多解,输出任意一组解;如果无解,输出一个整数0。
Sample Input & Sample Output

HINT
30%的数据满足n, m≤10
100%的数据满足3≤n, m≤200
题解:
把ai认为是i的父亲,使其连边,那么题目给出的关系构成了一个基环树森林。
对于在环外、指向环的边(即“树”的部分),使骰子的每一个面都比其父亲大。
观察1、4样例可以发现一个构造方式:对于一个大小为n环,从第一个点开始,逆着父亲边放入1~n;再从第一个点在环上的儿子开始,逆着父亲边以此放入n+1~2*n,直到放满n*m个数。
但是这个构造法在样例3中失败了。事实上,可以证明,只有在像样例3这种环大小为3,骰子面数为4的情况下,该方法会失效。对于这种情况,进行特判。
注意环大小为2或是m<=2的情况,一定无法构造。
代码:
const
bb:array[..]of longint=(,,,,,,,,,,,);
var
i,j,k,l,n,m,cnt:longint;
fa,a,b,c:array[..]of longint;
d:array[..,..]of longint;
procedure ss2(x:longint);
var i:longint;
begin
if a[x]< then
begin
for i:= to m do
begin inc(cnt); d[x,i]:=cnt; end;
a[x]:=;
end;
i:=c[x];
while i> do
begin
if a[i]< then ss2(i);
i:=b[i];
end;
end;
procedure ss(x:longint);
var i,j,k,l,xx:longint;
begin
a[x]:=; x:=fa[x];
while a[x]= do
begin
a[x]:=; x:=fa[x];
end;
k:=; xx:=fa[x]; a[x]:=;
while x<>xx do begin inc(k); a[xx]:=; xx:=fa[xx]; end;
if k<= then begin writeln(); halt; end;
if(k=)and(m=)then
begin
for i:= to do
begin
d[x,+((i-)div )]:=bb[i];
x:=fa[x];
end;
end else
begin
for i:= to m do
begin
l:=cnt+k;
for j:= to k do
begin
d[x,i]:=l; dec(l);
if j<>k then x:=fa[x];
end;
cnt:=cnt+k;
end;
end;
for i:= to k do
begin
ss2(x); x:=fa[x];
end;
end;
begin
readln(n,m);
for i:= to n do
begin
read(fa[i]);
b[i]:=c[fa[i]]; c[fa[i]]:=i;
end;
for i:= to n do
if a[i]= then ss(i);
for i:= to n do
begin
for j:= to m do write(d[i,j],' ');
writeln;
end;
end.
BZOJ1298[SCOI2009]骰子的学问的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Frida HOOK微信实现骰子作弊
由于微信摇骰子的功能在本地进行随机后在发送,所以存在可以hook掉判断骰子数的方法进行修改作弊. 1.frida实现hook java层函数1)写个用来测试的demo,当我们点击按钮的时候会弹出窗口显 ...
- js+css实现骰子的随机转动
网上找的例子,然后增添了新的东西,在这里展示一下...... 效果图预览: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...
- BZOJ1026: [SCOI2009]windy数[数位DP]
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6346 Solved: 2831[Submit][Sta ...
- html canvas 骰子1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 掷骰子-IOS新手项目练习(抱歉,由于个人原因,图片没显示,要源码的项目私聊)
---恢复内容开始--- 今天我们来讲的就是项目<掷骰子> 首先我们先下载资源包,也就是我们需要的图片[点击图片下载] 在我们下载完图片之后,我们就可以开始创建项目 一.我们项目的做法可以 ...
- html5掷骰子的小demo
代码如下: <!DOCTYPE> <html> <title>柯乐义</title> <head> <script> var l ...
- 【编程题目】n 个骰子的点数
67.俩个闲玩娱乐(运算).2.n 个骰子的点数.把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S.输入 n,打印出 S 的所有可能的值出现的概率. 思路:用递归把每个骰子的可能情况变量,记录 ...
- 【原】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)下.md
之前看到智能社主页的那个骰子样式的钟表,最近研究了一下,虽然没有仔细看他是怎么做的,但是学了css3的动画之后想自己尝试着写一下,用到的原理可能和智能社网站的不太一样,我自己主要用到了css3和js. ...
随机推荐
- YYModel 源码解读 总结
在使用swfit写代码的过程中,使用了下oc写的字典转模型,发现有些属性转不成功,就萌生了阅读源码的想法. 其实一直都知道Runtime机制,但并没有系统的学习,可能是因为平时的使用比较少,无意间在g ...
- 使用F#开发ASP.NET Core应用程序
.NET Core 里的F# 在.NET Core刚发布时,就已经添加了对F#的支持.但因为当时F#组件还不完整,而一些依赖包并没有放在Nuget上,而是社区自己放到MyGet上,所以在使用dotne ...
- ASP.NET WebApi 文档Swagger中度优化
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 写在前面 在后台接口开发中,接口文档是必不可少的.在复杂的业务当中和多人对接的情况下,简 ...
- react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置
参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup. ...
- springboot 学习资源推荐
springboot 是什么?对于构建生产就绪的Spring应用程序有一个看法. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.(这是springboot的官方介绍) 我们为什么要学 ...
- java范型集合中的成员排序
范型集合中的类是JsonObject,不是自定义类,如果是自定义类就直接取要比较的字段值. ArrayList<JSONObject> TList = new ArrayList<J ...
- Python (一) 简介、安装
一.简介 Python:是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 那么Python 究竟是来做什么的? 首 ...
- mysql can't create threads in threadpool
最近,我们在券商端的mysql运行一段时间后,发生mysql can't create threads in threadpool,如下所示: 据官网一个报告显示,目测是一个bug,内存紧张导致,那天 ...
- javaScript中的小细节-局部作用域中的var
javaScript中var是很神奇的,在局部作用域中,var a = b = c = 1;是不一样的,a为使用var声明的变量,而b和c则是全局下的,此类变量被称为隐式全局变量:var a = 1; ...
- 5.6 JS中基本包装类型
为了便于操作基本类型值,ES还提供了三种特殊的引用类型,即(基本包装类型):Number,String,Boolean.这三种类型与前面介绍的引用类型相似,但同时也拥有基本数据类型的一些特性. 平时经 ...