生成字符串(strs)
【问题描述】
假设字符串只由字符“0”,“1”,“”组成,其中字符“”表示该字符可由
字符“0”或“1”替代。
现有一些字符串,根据这些字符串生成所有可生成的字符串。如:
{10,1,0 }可生成{10,01,11,00 }
{101,001,*01}可生成{101,001}
注意后一个例子中“*01”并没有生成新的字符串。
【输入格式】strs.in
第一行是两个整数 m,n(1≤m≤15,1≤n≤2500)。m 表示字符串的长度,n
表示字符串的个数。
以下 n 行每行各有一个字符串。文件中各行的行首、行末没有多余的空格。
【输出格式】strs.out
一个整数,表示所能生成的字符串的个数。
【输入样例】
2 3
10
*1
0*
【输出样例】
4
【解题思路】
显而易见,这题就是枚举+去重,枚举很简单,DFS可以轻松解决,但是判重是本题的重点,生成字符串后再往前一个一个比对是否出现过很浪费时间。
所以,可以利用把字符串压缩成一个整数,这些字符串都是01串,我们可以将其转换成数字后转换为十进制整数,再用数组计数,可以大幅度缩小需要的空间。
【参考程序】

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int m,count[16],a[70000],sum,n;
string st;
int change(string num)
{
int ans=0;
for (int i=0;i<m;i++)
if (num[i]=='1') ans+=count[i];
return ans;
}
void dfs(string st,int p)
{
if (p>=m)
{
int tmp=change(st);//转换进制
a[tmp]++;//数组计数
return ;
}
if (st[p]!='*')
{
dfs(st,p+1);
return ;
}//不是星号,直接往下一层。
st[p]='1';//用1代替星号
dfs(st,p+1);
st[p]='0';//用0代替星号
dfs(st,p+1);
}
int main()
{
freopen("strs.in","r",stdin);
freopen("strs.out","w",stdout);
cin>>m>>n;
count[0]=1;
for (int i=1;i<m;i++) count[i]=count[i-1]<<1;//为二进制转换做准备
for (int i=1;i<=n;i++)
{
cin>>st;
dfs(st,0);
}
for (int i=0;i<count[m-1]*2;i++) if (a[i]>0) sum++;//统计
cout<<sum;
return 0;
}

【2018寒假集训Day 1】【位运算】生成字符串的更多相关文章

  1. 【2018寒假集训 Day1】【位运算】翻转游戏

    翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...

  2. 【2018寒假集训 Day1】【位运算】桐桐的运输方案

    桐桐的运输方案(transp) [问题描述] 桐桐有 N 件货物需要运送到目的地,它们的重量和价值分别记为: 重量:W1,W2,…,Wn: 价值:V1,V2,…,Vn: 已知某辆货车的最大载货量为 X ...

  3. 通过位运算生成ID

    public static void main(String[] args) { long serverId = 65535; System.out.println("ServerId:&q ...

  4. 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)

    花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...

  5. 【2018寒假集训 Day2】【动态规划】维修栅栏

    维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...

  6. 【2018寒假集训 Day2】【动态规划】钱币兑换(exchange)(自己翻译的2333)

    钱币兑换(exchange) 问题描述: Dave偶然获得了未来几天的美元(dollars)与马克(marks)之间的兑换率.例如Dave开始有100marks,请编写个程序帮助Dave找出最好的买卖 ...

  7. 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人

    蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...

  8. 洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解

    这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Ch ...

  9. 【2018寒假集训Day 8】【最小生成树】Prim和Kruskal算法模板

    Luogu最小生成树模板题 Prim 原理与dijkstra几乎相同,每次找最优的点,用这个点去松弛未连接的点,也就是用这个点去与未连接的点连接. #include<cstdio> #in ...

随机推荐

  1. 包管理工具-yum

    yum介绍 yum(全称为 Yellow dog Updater, Modified)是一个在 Fedora和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器.基于 RPM 包管 ...

  2. 设计模式(十)Strategy模式

    Strategy模式,就是用来整体地替换算法,可以轻松地以不同的算法解决同一个问题. 还是根据一个示例程序来理解这种设计模式吧.先看一下示例程序的类图. 然后看示例程序代码. package bigj ...

  3. vue表单和组件使用

    表单: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...

  4. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(2.2)- 在串行NOR Flash XIP调试原理

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列EVK在串行NOR Flash调试的原理. 本文是i.MXRT硬件那些事系列第二篇的续集,在第二篇首集 ...

  5. AQS 入门

    一 AQS简介 路径:java.util.concurrent.locks.AbstractOwnableSynchronizer. 定义:AQS提供了一种 通过维护一个volatile修饰 int类 ...

  6. IIS部署WCF疑难

    1.其他信息: 无法激活请求的服务. 可能原因:1. 服务的命名空间和接口的命名空间不一致.2. 传递的参数类型没有打上[DataContract], [DataMember]标签. 2.记得这样: ...

  7. Codeforces 1183F - Topforces Strikes Back

    Div. 3的题,竟然卡了好久,自闭.jpg 好像我的思路不太一样呢QAQ 首先注意到,如果一个数是另一个的因子,那它肯定不会出现在答案中. 我们先把所有数排序,然后对每个数,我们要往前再找两个数(或 ...

  8. [考试反思]1018csp-s模拟测试79:荒谬

    对,如果你想把第5名粘进来,那么图片就是这么夸张. 然而和我并没有什么关系,实在是太菜了. 但是还是想吐槽出题人是真心没良心啊...做了达哥的良心题之后眼光极其挑剔 这套题的部分分设置非常愚蠢,唯一一 ...

  9. 星空:差分,状压dp

    总算不再是能用暴力卡常/随机化水过的好T3了. 说是打了两个标签,实际上最关键的是题意转化. 如果你丝毫不转化的话也可以: #include<bits/stdc++.h> using na ...

  10. 那些Java架构师必知必会的技术

    Java基础 Java 7 和 Java 8 中的 HashMap原理解析 Java7 和 Java8 中的 ConcurrentHashMap 原理解析 Java中自定义注解 Java函数式编程和l ...