打卡信奥刷题(3523)用C++实现信奥题 P10950 太鼓达人

P10950 太鼓达人

题目描述

太鼓达人的鼓坏了,现在 vani 来修鼓。

鼓的主要元件是 MMM 个围成一圈的传感器。

每个传感器都有开和关两种工作状态,分别用 111000 表示。

显然,从不同的位置出发沿顺时针方向连续检查 KKK 个传感器可以得到 MMM 个长度为 KKK010101 串。

Vani 知道这 MMM010101 串应该是互不相同的。

而且鼓的设计很精密,MMM 会取到可能的最大值。

现在 Vani 已经了解到了 KKK 的值,他希望你求出 MMM 的值,并给出字典序最小的传感器排布方案。

输入格式

一个整数 KKK

输出格式

一个整数和一个二进制串,由一个空格分隔,分别表示可能的最大的 MMM 以及字典序最小的排布方案。

字符 000 表示关,111 表示开,你输出的串的第一个字和最后一个字是相邻的。

输入输出样例 #1

输入 #1

3

输出 #1

8 00010111

说明/提示

2≤K≤112\le K\le 112K11

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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值