Description

  七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行。这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk、Poet_shy和lydrainbowcat拯救出来的的applepi。看到两人对太鼓达人产生了兴趣,applepi果断闪人,于是cl拿起鼓棒准备挑战。然而即使是在普通难度下,cl的路人本性也充分地暴露了出来。一曲终了,不但没有过关,就连鼓都不灵了。Vani十分过意不去,决定帮助工作人员修鼓。

  鼓的主要元件是M个围成一圈的传感器。每个传感器都有开和关两种工作状态,分别用1和0表示。显然,从不同的位置出发沿顺时针方向连续检查K个传感器可以得到M个长度为K的01串。Vani知道这M个01串应该是互不相同的。而且鼓的设计很精密,M会取到可能的最大值。现在Vani已经了解到了K的值,他希望你求出M的值,并给出字典序最小的传感器排布方案。

  

  首先这道题如果在知道第一问答案的基础上做第二问有个显然的做法就是DFS

  但是时间复杂度..?第一问的答案<=2^k,每一位回溯也就是2^(2^k)//想都不要想啦...>_<

  我们来想象这个回溯有没有什么特别的性质

  我们把每连着的k个数字当成一个点,每个点的出边有两条,因为下一个数字可能是0可能是1

  入边同理也是两条,因为上一个数字可能是0可能是1

  然后我们发现每个点的出度=入度,而这恰好是欧拉图的判定条件

  所以原图是欧拉图,必然存在一条欧拉回路

  那么随意第一问必然可以取到最大的2^k

  对于第二问,还是原来的DFS,但是仔细想想会发现时间复杂度实际上是O(n)的

  因为除了遇到自环之外是没有往回的机会的

  可能会说:走到一个地方前面没路可走了?

  显然这不符合欧拉图的性质

  所以几乎一条线拉到底答案就出来啦

{
  Euler Diagram
}
program bzoj3033;
const maxn=;
var ans,k,i:longint;
b:array[-..maxn]of longint;
used:array[-..maxn]of boolean; function dfs(p,step:longint):boolean;
begin
if not used[p] then exit(false);
used[p]:=false;
b[step]:=p >> (k-);
if step=ans then exit(true);
if dfs(p << and (ans-),step+) then exit(true);
if dfs(p << and (ans-)+,step+) then exit(true);
used[p]:=true;
exit(false);
end; begin
readln(k);
ans:=;
fillchar(used,sizeof(used),true);
for i:= to k do ans:=ans*;
write(ans,' ');
dfs(,);
for i:= to ans do write(b[i]);
end.

  另外补一点欧拉图的定理:

  欧拉回路:经过图中每条边一次、行遍所有顶点的回路

  欧拉通路:经过图中每条边一次、行遍所有顶点的路径

  欧拉图:图中存在欧拉回路的图(可以脑补成在欧拉回路的边集基础上乱加几条边)

  半欧拉图:包含欧拉通路的图

  无向图欧拉图的判定:为连通图且图中的点度数均为偶数

  无向图欧拉通路的判定:为连通图且图中奇度点的个数只有0或2个

  有向图欧拉图的判定:为连通图且图中每个点的入度=出度

  有向图欧拉通路的判定:为连通图除了两个点外其他点的入度=出度,一个点的入度=出度+1,一个点的出度=入度+1,或者两个点的出度都=出度

[BZOJ3033]太鼓达人|欧拉图的更多相关文章

  1. bzoj3033 太鼓达人——欧拉图搜索

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3033 考虑那 (1<<k) 个数,要形成答案,必然是相邻两个数间有 k-1 个重 ...

  2. BZOJ3033 太鼓达人题解

    太鼓达人 时间限制: 1 Sec  内存限制: 128 MB 题目描述 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是 ...

  3. bzoj3033: 太鼓达人 欧拉路径

    题目链接 bzoj3033: 太鼓达人 题解 对于k-1位点,k位二进制位边,将点的转移连起来 每个点的入度和出度相等并且全部是偶点 只需要在这个图中找字典序最小的欧拉回路 可以贪心地找字典序较小的边 ...

  4. 【BZOJ-3033】太鼓达人 欧拉图 + 暴搜

    3033: 太鼓达人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 204  Solved: 154[Submit][Status][Discuss] ...

  5. BZOJ3033:太鼓达人(DFS,欧拉图)

    Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和ly ...

  6. BZOJ3033 太鼓达人

    3033: 太鼓达人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 690  Solved: 497[Submit][Status][Discuss] ...

  7. [bzoj3033]太鼓达人 题解(搜索)

    Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和ly ...

  8. BZOJ3033太鼓达人——哈密顿回路/欧拉回路

    题目描述 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和lydrainbo ...

  9. BZOJ3033: 太鼓达人(欧拉回路)

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 524  Solved: 400[Submit][Status][Discuss] Description ...

随机推荐

  1. DO NOT BELIEVE HIS LIES 游戏随笔

    这游戏是我大学的一个基友推荐的,好吧,感觉被他坑了··· 解谜游戏~慢慢来玩玩··· 恩,就是下面红色圈圈画起来的这个家伙. #1 第一关 好吧,界面上也没啥可聊的,上面写了一行字,THE FIRST ...

  2. 国际电话区号SQL

    CREATE TABLE `phone_prefix` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `country` varchar(30) N ...

  3. OpenStack配置虚拟机vcpu绑定步骤 转至元数据结尾

    . Changed in compute node: 给宿主机预留资源: 宿主机可用cpu:cpuid – cpuid 宿主机可用内存:25G #vim /etc/nova/nova.conf vcp ...

  4. Ubuntu16.04 + CUDA9.0 + cuDNN7.3 + Tensorflow-gpu-1.12 + Jupyter Notebook 深度学习环境配置

    目录 一.Ubuntu16.04 LTS系统的安装 二.设置软件源的国内镜像 1. 设置方法 2.关于ubuntu镜像的小知识 三.Nvidia显卡驱动的安装 1. 首先查看显卡型号和推荐的显卡驱动 ...

  5. Visual Studio 2014安装包

    点击下载

  6. 学习materialize

    <div class="container"> <div class="row">   </div> <div cla ...

  7. mysql创建用户并手授权

    --创建用户CREATE USER 'test'@'%' IDENTIFIED BY 'test'; --授权GRANT ALL ON *.* TO 'test'@'%'; --修改密码SET PAS ...

  8. Week3 Teamework from Z.XML-团队分工及贡献分分配办法

    引言:团队项目即将开展,本文将就团队分工,以及分数分配办法进行阐述 一.团队分工 本周我们团队进行了初步的分工,结果如下: PM: 李孟 Dev:毛宇 薛亚杰 肖俊鹏 罗凡 Test:周敏轩 马辰 李 ...

  9. chrome谷歌浏览器导致的密码被修改现象

    版本 68.0.3440.106(正式版本) (32 位)记住密码功能有个缺陷,会把自己的密码自动填写到别人的密码框中,假如这个时候点击保存密码,就会导致其他用户的密码被修改为登录用户的密码.   很 ...

  10. java正则表达式 1 -- 符号

    正则表达式主要是用于操作字符串的规则 1 首先体验一下正则表达式: 需求:某个串只能是数字 传统方法: public class Demo2{ public static void main(Stri ...