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,或者两个点的出度都=出度

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-WebApi与Unity注入
  2. WWDC2016 观后杂感
  3. asp.net mvc bootstrap datatable 服务端分页 更新槽糕的代码【1】
  4. C#编程语言与面向对象—— 多态
  5. SLAM数据集
  6. iOS设计模式-Block实现代理的逻辑
  7. Mac下Intellij IDea发布Java Web项目详解四 为所有Module配置Tomcat Deployment
  8. java 基础(匿名内部类)
  9. The 3n + 1 problem
  10. Java集合框架学习(一)List
  11. 第一本的java 的小总结
  12. 2018-2019-2 网络对抗技术 20165305 Exp2 后门原理与实践
  13. 路飞学城-Python开发集训-第5章
  14. qml: 打包 和 发布
  15. javascript 类型比较方法
  16. Lifting the Stone(hdu1115)多边形的重心
  17. 英特尔和 Valve* 将英特尔&#174; Embree 光线追踪技术添加至全新 Steam* Audio 插件
  18. python基础学习1-生成器,递归函数
  19. Bridge 桥接
  20. NSURLSession下载和断点续传

热门文章

  1. [转]struct2 拦截所有没有登录的用户,强行转到登录界面AuthorizationInterceptor
  2. Python-学习-小例子练习
  3. 调度器&amp;负载均衡调度算法整理
  4. AcCoder Contest-115 D - Christmas
  5. 解决:Unable to execute dex: GC overhead limit exceeded
  6. 第十四次ScrumMeeting会议
  7. 用OneNote写博客的方法
  8. 【python】Python3中出现&#39;gbk&#39; codec can&#39;t encode characte的成功解决方法?
  9. 基于Thinkphp5+phpQuery 网络爬虫抓取数据接口,统一输出接口数据api
  10. 【转】Java线程系列:Callable和Future