资讯详情

6023: 传感器(DFS)

6023: 传感器

时间限制:1 Sec 内存限制:128 MB 提交:50 解决:21 [ 提交][ 状态][ [讨论版][命题人: admin]

题目描述

SR最近买了一款新的电子桌游 这个玩具是一个M周围的传感器。每个传感器都有两种工作状态:开关,分别用1和0表示。显然,从不同的位置触发连续检查K传感器,可以得到长度为K的01串。SR知道这个M个01串应该是不一样的。 而且这款桌游的设计很安静,M最大可能值。SR已知K值,他希望你能找到M值,并给出字典序最小的传感器排列方案。

输入

一行一整数K

输出

一个整数 M 与二进制串,由空间隔开。表示最大的可能性 M,以及字典序最小的排列方案、字符 0 表示关, 1 表示打开。你输出的第一个字符和最后一个字符相邻

样例输入

3 

样例输出

8 00010111 

提示

100%的数据 2<=K<=11

来源

2018江苏冬令营4

借鉴:

将0~2^k-1做点,每点二进制末尾加1或0,去掉最高位,得到下一点。dfs,类似欧拉回路

  view plain   copy
  1. #include<bits/stdc++.h>  
  2. using namespace std;  
  3. int a[1<<13];  
  4. bool vis[1<<13];  
  5. bool dfs(int u,int step,int n)  
  6. {  
  7.     if(vis[u])return 0;  
  8.     vis[u]=1;  
  9.     a[step]=u&1;  
  10.     if(step==n-1)return 1;  
  11.     if(dfs((u<<1)&(n-1),step+1,n))return 1;  
  12.     if(dfs((u<<1)&(n-1)|1,step+1,n))return 1;  
  13.     vis[u]=0;  
  14.     return 0;  
  15. }  
  16. int main()  
  17. {  
  18.     int n,k;  
  19.     cin>>k;  
  20.     n=1<<k;  
  21.     dfs(0,0,n);  
  22.     printf("%d ",n);  
  23.     for(int i=1;i<k;i++)printf("0");  
  24.     for(int i=0;i<n-k+1;i++)printf("%d",a[i]);  
  25.     printf("\n");  
  26. }  

标签: 传感器dfs

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台