首页 > 其他分享 >题解:P10950 太鼓达人

题解:P10950 太鼓达人

时间:2024-09-24 16:38:33浏览次数:11  
标签:01 题解 P10950 长度 太鼓达 本题

分析

显然答案包含长度为 \(K\) 的所有 \(01\) 串,每个串和前一个的重叠长度为 \(K-1\),所以每个串对长度的贡献为 \(1\)。

因此该串的长度为所有 \(01\) 串的个数,即 \(2^K\)。


考虑第二个如何解决。

发现每个位置的状态只有 \(0\) 和 \(1\),考虑爆搜。

显然直接搜的复杂度为 \(O(2^{2^K})\),不能通过本题。

考虑剪枝,如果搜索中当前的串不符合条件,那么直接返回。

这样就能通过本题。

Code

#include<bits/stdc++.h>
using namespace std;
#define maxn 100005

string ans, tmp;
bool vis[1<<12];

int to_int(string s)
{
    int ret=0;
    for(auto c:s) ret=(ret<<1)|(c^48);
    return ret;
}

bool chk(int k)
{
    tmp=ans+ans;
    int n=ans.size();
    memset(vis, 0, sizeof vis);
    for(int i=0;i<n;i++)
    {
        int r=to_int(tmp.substr(i, k));
        if(vis[r]) return 0;
        vis[r]=1;
    }
    return 1;
}

bool chk1(int k)
{
    tmp=ans;
    int n=ans.size();
    memset(vis, 0, sizeof vis);
    for(int i=0;i<n-k;i++)
    {
        int r=to_int(tmp.substr(i, k));
        if(vis[r]) return 0;
        vis[r]=1;
    }
    return 1;
}

void dfs(int p, int k)
{
    if(!chk1(k)) return;
    if(p==(1<<k)) 
    {
        if(chk(k)) cout<<ans, exit(0);
        return;
    }
    ans+='0';
    dfs(p+1, k);
    ans.pop_back();
    ans+='1';
    dfs(p+1, k);
    ans.pop_back();
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int k;
    cin>>k;
    cout<<(1<<k)<<' ';
    dfs(0, k);
}

标签:01,题解,P10950,长度,太鼓达,本题
From: https://www.cnblogs.com/redacted-area/p/18429457

相关文章

  • 题解:P5184 [COCI2009-2010#2] PASIJANS
    分析考虑贪心,每次尽量选最小的字符。显然是每次选字典序最小的弹栈。我们要比较的是每个栈的字典序,但是朴素比较是\(O(L)\)的,考虑将它优化到\(O(1)\)。这个时候我们可以先离散化然后套路地将所有串拼一起跑SA。记得在每个串之间加分割符。这样每次比较字典序就变成了\(......
  • 题解:P6351 [PA2011] Hard Choice
    题意维护一张无向图,要求支持以下操作:切断一条边。查询两个点是否有有两条完全不同的路径相连。分析因为断边操作不好维护,考虑离线后将断边变为加边。因此,我们只需要维护加边操作即可。考虑使用LCT。首先,因为涉及到边权,套路地用节点代替边。如果某一条边连接的两个点......
  • ABC245G Foreign Friends 题解 / 二进制分组
    ABC245GForeignFriends题解回顾一下二进制分组。题目大意给定一张\(N\)个点\(M\)条边的无向图,及\(L\)个特殊点。每个点有颜色\(C_i\)。求每个点到离他最近的与他颜色不同特殊点的距离。Solve两个点颜色不同,等价于他们的颜色在二进制下至少有一位不同。所以我们考......
  • MySQL GROUP BY 分区大小写问题解析
    在数据库操作中,GROUPBY是一个常用的SQL语句,用于根据一个或多个列的值对结果集进行分组。然而,在使用MySQL时,你可能会遇到一个常见问题:大小写敏感性。本文将探讨MySQL中GROUPBY的大小写敏感性问题,并提供一些解决方案。什么是大小写敏感性?在计算机科学中,大小写敏感性是指......
  • Codeforces Round 974 (Div.3) 题解
    CodeforcesRound974(Div.3)题解A.RobinHelps模拟按照题意模拟即可。voidShowball(){intn,k;cin>>n>>k;intcur=0,ans=0;for(inti=0;i<n;i++){intx;cin>>x;if(x>=k)cur+=x;elseif(!x){if(cur>=1)cu......
  • AT_jsc2021_g Spanning Tree 题解
    感觉自己稍微有一点唐了。思路我们首先可以把一定要连的边连起来。这样就变成了一个无向图生成树计数问题。如何求解。使用矩阵树定理!我们可以求出基尔霍夫矩阵,然后跑一遍行列式就可以了。时间复杂度:\(O(n^3)\)。Code#include<bits/stdc++.h>usingnamespacestd;con......
  • Count Equation Solutions 题解
    前言题目链接:洛谷;UVA。题意简述求以下方程解的个数:\[a_1x_1-a_2x_2+a_3x_3-a_4x_4+a_5x_5-a_6x_6=0\]其中\(1\leqx_i\leqm\leq10^2\),\(x_i\in\mathbb{Z}\),多测。题目分析把\(a_2,a_4,a_6\)变成其相反数,变成\(\sum\limits_{i=1}^6a......
  • 题解 [ARC184B] 123 Set
    个人认为思维难点相同的三倍经验:P3226[HNOI2012]集合选数、TFSETS-Triple-FreeSets。区别在于状压DP的方法。我们称不包含质因子\(2\)和\(3\)的数为\(2,3\texttt{-Free}\)的。对于\([1,n]\)内每个\(2,3\texttt{-Free}\)的整数\(u\),可以列出以下的矩阵:\[\begi......
  • NEERC2013题解
    B.BonusCards简单dp一下,记\(f_{ij}\)为前i次有j次分给第一类的概率。最后再算上我在第一类被选上的概率即可。constintN=3005;#defineintlonglongintn,a,b;doublef[N][N],g[N][N];signedmain(void){#ifdefONLINE_JUDGE freopen("bonus.in","r",stdin......
  • 题解:CF888G Xor-MST
    题解:CF888GXor-MST题目大意:给定\(n\)个点的点权,任意两点间边权是点权的异或和。求这张完全图的MST的权值。思路:Boruvka+Trie树+按位贪心。关键就在于如何求出Boruvka中的best数组。考虑对点权建trie树,对于节点\(i\)本轮的连边,就是找“和它最相似”的那......