P10950 太鼓达人
题目描述
太鼓达人的鼓坏了,现在 vani 来修鼓。
鼓的主要元件是 MMM 个围成一圈的传感器。
每个传感器都有开和关两种工作状态,分别用 111 和 000 表示。
显然,从不同的位置出发沿顺时针方向连续检查 KKK 个传感器可以得到 MMM 个长度为 KKK 的 010101 串。
Vani 知道这 MMM 个 010101 串应该是互不相同的。
而且鼓的设计很精密,MMM 会取到可能的最大值。
现在 Vani 已经了解到了 KKK 的值,他希望你求出 MMM 的值,并给出字典序最小的传感器排布方案。
输入格式
一个整数 KKK。
输出格式
一个整数和一个二进制串,由一个空格分隔,分别表示可能的最大的 MMM 以及字典序最小的排布方案。
字符 000 表示关,111 表示开,你输出的串的第一个字和最后一个字是相邻的。
输入输出样例 #1
输入 #1
3
输出 #1
8 00010111
说明/提示
2≤K≤112\le K\le 112≤K≤11。
C++实现
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+10;
ll k;
ll cur[N];
bool ans[N];
ll tot,lim;
void dfs(ll x)
{
for(ll i=cur[x];i<=1;i=cur[x])
{
cout<<i;
cur[x]=i+1;
dfs(((x<<1)&lim)|i);
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>k;
lim=(1ll<<(k-1))-1;
cout<<(1ll<<k)<<" ";
dfs(lim);
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
用C++实现信奥题 P10950 太鼓达人&spm=1001.2101.3001.5002&articleId=163966535&d=1&t=3&u=d547a03fe1cb4d70a88563377f9fcb9c)
538

被折叠的 条评论
为什么被折叠?



