BZOJ1298骰子的学问

题解:

把ai认为是i的父亲,使其连边,那么题目给出的关系构成了一个基环树森林。

对于在环外、指向环的边(即“树”的部分),使骰子的每一个面都比其父亲大。

观察1、4样例可以发现一个构造方式:对于一个大小为n环,从第一个点开始,逆着父亲边放入1~n;再从第一个点在环上的儿子开始,逆着父亲边以此放入n+1~2*n,知道放满n*m个数。

但是这个构造法在样例3中失败了。事实上,可以证明,只有在像样例3这种环大小为3,骰子面数为4的情况下,该方法会失效。对于这种情况,进行特判。

注意环大小为2或是m<=2的情况,一定无法构造。

代码:

const
  bb:array[1..12]of longint=(1,2,4,3,7,5,10,8,6,11,9,12);
var
  i,j,k,l,n,m,cnt:longint;
  fa,a,b,c:array[0..1001]of longint;
  d:array[0..1001,0..1001]of longint;
procedure ss2(x:longint);
var i:longint;
begin
  if a[x]<2 then
  begin
    for i:=1 to m do
    begin inc(cnt); d[x,i]:=cnt; end;
    a[x]:=2;
  end;
  i:=c[x];
  while i>0 do
  begin
    if a[i]<2 then ss2(i);
    i:=b[i];
  end;
end;
procedure ss(x:longint);
var i,j,k,l,xx:longint;
begin
  a[x]:=1; x:=fa[x];
  while a[x]=0 do
  begin
    a[x]:=1; x:=fa[x];
  end;
  k:=1; xx:=fa[x]; a[x]:=2;
  while x<>xx do begin inc(k); a[xx]:=2; xx:=fa[xx]; end;
  if k<=2 then begin writeln(0); halt; end;
  if(k=3)and(m=4)then
  begin
    for i:=1 to 12 do
    begin
      d[x,1+((i-1)div 3)]:=bb[i];
      x:=fa[x];
    end;
  end else
  begin
    for i:=1 to m do
    begin
      l:=cnt+k;
      for j:=1 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:=1 to k do
  begin
    ss2(x); x:=fa[x];
  end;
end;
begin
  readln(n,m);
  for i:=1 to n do
  begin
    read(fa[i]);
    b[i]:=c[fa[i]]; c[fa[i]]:=i;
  end;
  for i:=1 to n do
  if a[i]=0 then ss(i);
  for i:=1 to n do
  begin
    for j:=1 to m do write(d[i,j],‘ ‘);
    writeln;
  end;
end.
时间: 2024-07-28 20:16:44

BZOJ1298骰子的学问的相关文章

大有学问的刷漆小工具

在进行装修过程中占有相当重要的一部分--刷漆,因为墙面粉刷的结果会直接影响着整个家装的质量.要做到完美粉刷墙面当然少不了我们刷漆小工具,这些工具都有哪些呢?让我们一起来看看吧. 工具之一--需用滚筒刷墙面 又称滚筒,需搭配漆盘使用的滚筒刷,由于滚面范围广,所以是最省力.省时的刷具,尤其是接上延长杆后,可轻易粉刷墙面高处或天花板,但缺点是容易产生漆料喷溅的状况,所以滚筒刷的毛不要太短,但一定要细,这样刷出来的漆膜才会手感细腻. 滚筒刷分长毛,中毛.短毛三种,其表现为滚筒刷毛的长短,而不是滚筒本身的

利用Python分析快三骰子游戏

# -*- coding: utf-8 -*- """ Created on Tue Jan 24 13:07:01 2017 @author: Wayne """ import random import pandas as pd import matplotlib.pylab as pl list1 = [] list2 = [] m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17 = 0,0,

垒骰子

赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6. 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来. atm想计算一下有多少种不同的可能的垒骰子方式. 两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同. 由于方案数可能过多,请输出模 10^9 +

在axure中实现商品数量加减效果,原型库网站讲师-金乌 解答同学问

有同学在群里提问,如何使用axure制作商品数量增加减少效果,见GIF图.虽然属于初级教程,但很多同学还是小白新手阶段,所以特地录制了详细的视频讲解,供大家学习参考! 该教程由原型库网站录制http://www.yuanxingku.com转载请注明出处! 在axure中实现商品数量加减效果,原型库网站讲师-金乌 解答同学问,布布扣,bubuko.com

《剑指offer》 面试题43 n个骰子的点数 (java)

引言:写这篇文章的初衷只是想做个笔记,因为这道题代码量有点大,有点抽象,而书上并没有详细的注释.为了加深印象和便于下次复习,做个记录. 原题:把n个骰子扔到地上,所有骰子朝上一面的点数之后为s. 输入n,打印出s所有可能的值出现的概率.(每个骰子6个面,点数从1到6) 解法一:基于递归,时间效率不高 递归的思想一般是分而治之,把n个骰子分为第一个和剩下的n-1个.先计算第一个骰子每个点数出现的次数,再计算剩余n-1个骰子出现的点数之和.求n-1个骰子的点数之的方法和前面讲的一样,即再次把n-1个

利用卷积网络识别骰子点数

前言小叙 前一段时间通过bpnn反向传播神经网络实现了识别骰子点数的目标,而且效果不错,我们的识别率可以达到80%上下,其实已经可以应用于生产环境了.只不过读了卷积神经网络,第一次感受到原来还可以这样,感受到了新的世界观和人生观. 卷积这个词,第一次接触还是读图形处理的书的时候,中间会有卷积和滤波处理图片的内容,其实当时对于卷积也是懵懵懂懂,不明所以,无非就是一个个求积再求和,能有什么意义.不过这些天我算是有些明白了. 想通俗了解卷积的朋友可以访问这个链接.境外的朋友请看YouTube短视频,下

Android&quot;挂逼&quot;修炼之行---微信摇骰子和猜拳作弊器原理解析

一.前言 在之前的一篇文章中我们已经详细介绍了Android中Hook工作的一款神器Xposed工具:Xposed框架原理解析和使用案例分析 在那一篇文章中我们介绍了如何安装Xposed框架,以及如何使用Xposed库编写第一个模块来做到修改系统方法功能的效果,同时也说到了一个非常重要的知识点就是:在Hook过程中最重要的一点就是如何找到Hook点,而对于这一点很多同学都会感觉到非常的困难,因为对于修改系统方法还好,因为可以简单的去查看具体的Android源码即可,但是如果说要去编写一些应用和游

《竞品调研:抄也是一门学问》学习总结

最近看了三节课出品的课程<竞品调研:抄也是一门学问>,学习总结如下: 1.产品调研的误区: (1).产品调研报告 不等于 行业分析报告 (2).产品调研报告 不等于 产品体验报告 (3).产品调研报告 不等于 写产品报告 (4).不要用"看起来很高深''的分析过程来证明自己的结论是靠谱的 (5).不要期望通过竞品的调研来证明自己的存在感 2.不做产品调研的PM是不合格的,优秀的PM一定能做好产品调研 3.产品调研的全过程: 调研背景--明确目的--选择产品-体验产品--还原产品--分

第六届蓝桥杯java组 叠骰子

题意: 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6. 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来. atm想计算一下有多少种不同的可能的垒骰子方式. 两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同. 由于方案数可能过多,请输出模 10^