bzoj 3033: 太鼓达人 欧拉图+dfs
2017-10-09 20:14
267 查看
题意
鼓的主要元件是M个围成一圈的传感器。每个传感器都有开和关两种工作状态,分别用1和0表示。显然,从不同的位置出发沿顺时针方向连续检查K个传感器可以得到M个长度为K的01串。Vani知道这M个01串应该是互不相同的。而且鼓的设计很精密,M会取到可能的最大值。现在Vani已经了解到了K的值,他希望你求出M的值,并给出字典序最小的传感器排布方案。K<=11
分析
因为这是一个连通图且每个点入度等于出度,所以这必然是一个欧拉图。然后直接dfs找欧拉回路就好了。代码
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int n,bin[20],vis[3005],ans[3005]; bool dfs(int x,int y) { vis[x]=1; if (x==bin ) return 1; if (!vis[(x<<1)&bin ]) { ans[y]=0; if (dfs((x<<1)&bin ,y+1)) return 1; } if (!vis[(x<<1|1)&bin ]) { ans[y]=1; if (dfs((x<<1|1)&bin ,y+1)) return 1; } vis[x]=0; return 0; } int main() { scanf("%d",&n); bin[0]=1; for (int i=1;i<=n;i++) bin[i]=bin[i-1]*2; bin --; dfs(0,1); printf("%d ",bin +1); for (int i=1;i<=n;i++) putchar('0'); for (int i=1;i<=bin +1-n;i++) putchar(ans[i]+'0'); return 0; }
相关文章推荐
- [BZOJ3033]太鼓达人(欧拉图+dfs)
- bzoj 3033: 太鼓达人 (欧拉图+dfs)
- 【BZOJ3033】太鼓达人 暴力+欧拉回路
- BZOJ-3033 太鼓达人
- [BZOJ3033]太鼓达人|欧拉图
- bzoj 3033: 太鼓达人 [欧拉回路]
- 【bzoj3033】太鼓达人 DFS欧拉图
- BZOJ 3033 太鼓达人(DFS+欧拉回路)
- 3033: 太鼓达人 欧拉图+暴力
- 大暴搜 [BZOJ3303] 太鼓达人
- 【BZOJ-3033】太鼓达人 欧拉图 + 暴搜
- 3033: 太鼓达人
- 3033: 太鼓达人
- [BZOJ3514]Codechef MARCH14 GERALD07加强版
- bzoj1729 [Usaco2005 dec]Cow Patterns 牛的模式匹配 kmp+乱搞
- BZOJ 2095 [Poi2010]Bridges 二分+最大流
- bzoj3576[Hnoi2014]江南乐
- 【bzoj3926】 Zjoi2015—诸神眷顾的幻想乡
- [构造] Codeforces Gym 101173 CERC 16 K & BZOJ 4796 Key Knocking
- 【BZOJ2654】tree【二分】【最小生成树】