【2018寒假集训Day 1】【位运算】生成字符串
生成字符串(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】【位运算】生成字符串的更多相关文章
- 【2018寒假集训 Day1】【位运算】翻转游戏
翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...
- 【2018寒假集训 Day1】【位运算】桐桐的运输方案
桐桐的运输方案(transp) [问题描述] 桐桐有 N 件货物需要运送到目的地,它们的重量和价值分别记为: 重量:W1,W2,…,Wn: 价值:V1,V2,…,Vn: 已知某辆货车的最大载货量为 X ...
- 通过位运算生成ID
public static void main(String[] args) { long serverId = 65535; System.out.println("ServerId:&q ...
- 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)
花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...
- 【2018寒假集训 Day2】【动态规划】维修栅栏
维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...
- 【2018寒假集训 Day2】【动态规划】钱币兑换(exchange)(自己翻译的2333)
钱币兑换(exchange) 问题描述: Dave偶然获得了未来几天的美元(dollars)与马克(marks)之间的兑换率.例如Dave开始有100marks,请编写个程序帮助Dave找出最好的买卖 ...
- 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人
蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...
- 洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解
这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Ch ...
- 【2018寒假集训Day 8】【最小生成树】Prim和Kruskal算法模板
Luogu最小生成树模板题 Prim 原理与dijkstra几乎相同,每次找最优的点,用这个点去松弛未连接的点,也就是用这个点去与未连接的点连接. #include<cstdio> #in ...
随机推荐
- 记录一次诡异的Maven Profile不生效的问题
记录一次诡异的Maven Profile不生效的问题 现象 maven 打包之后,复制的 profile对应的resource文件总是不正确的. 即便是加了 mvn clean package -P ...
- 编程语言分类 + python解释器的安装 + jupyter的使用(day 02整理)
目录 一.昨日内容回顾 一 计算机基础之编程 (一) 什么是编程语言 (二) 什么是编程 (三) 为什么编程 二 计算机组成 (一) CPU (二) 存储器 (三) I/O设备 (四) 多核CPU ( ...
- R语言:绘制知识图谱
知识图谱主要是通过将应用数学,图形学,信息可视化技术,信息科学等学科的理论与方法与计量学引文分析.共现分析等方法结合,利用可视化的图谱形象地展示学科的核心结构.发展历史.前沿领域以及整体知识架构达到多 ...
- deepin扬声器/耳机没有声音解决方案
昨天准备在deepin系统下看视频学习一下Linux,结果登入deepin系统后发现不论是外放还是插耳机竟然都没有声音,这种情况以前也出现过,只不过没有在意,后来就自己又好了,今天这次可真是让我决定要 ...
- 什么是"双活"
什么是"双活" 主备数据中心之间一般有热备.冷备.双活三种备份方式. 热备 热备的情况下,只有主数据中心承担用户的业务,此时备数据中心对主数据中心进行实时的备份,当主数据中心挂掉以 ...
- P2934 [USACO09JAN]安全出行
图论瞎搞...... solution: 按例化简:给定一个无向图,保证单源最短路唯一,求每个点到1号点的最短路最后一条边被封锁的情况下的最短路 乍一看,应该是次短路,但是稍微用脚趾头想想都能发现不是 ...
- spring boot 长时间运行上传报临时目录找不到
The temporary upload location [/tmp/tomcat-docbase.3752410576653354473.8899/work/Tomcat/localhost/RO ...
- 爬虫学习--Day4(小猿圈爬虫开发_2)
requests模块 - urllib模块 - requests模块 requests模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高.作用:模拟浏览器发送请求. 如 ...
- 分类算法之逻辑回归(Logistic Regression
分类算法之逻辑回归(Logistic Regression) 1.二分类问题 现在有一家医院,想要对病人的病情进行分析,其中有一项就是关于良性\恶性肿瘤的判断,现在有一批数据集是关于肿瘤大小的,任务就 ...
- 模块参数,系统调用,字符设备编程重要数据结构,设备号的申请与注册,关于cdev的API
1.模块参数 应用编程: int main(int argc, char *argv[]) { } ./a.out xxx yyy zzz ...