P10950 太鼓达人 题解
这是一种欧拉回路的做法,因为我观察到题解区没有欧拉回路的题解。
题意
题意就不再赘述了,需要的可以看其他题解。
思路
如果把每个
我们还可以转换思路,把每个
显然第一问的答案等于边数 ——
接下来是实现上的细节:我们可以采用当前弧优化来减小最坏复杂度。其次,我们必须以
代码
#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;
}
感觉比不少暴力还要简短,而且可以过