Regular Number HDU - 5972(巧妙的字符串匹配+bitset)

使用基于物质点法(MPM)的Anura3D模拟沙柱坍塌 本博客使用开源软件Anura3D软件模拟了一个沙柱坍塌的过程,这个软件是基于基于物质点法(MPM)设计的 阅读详情

Regular Number HDU - 5972

 Using regular expression to define a numeric string is a very common thing. Generally, use the shape as follows:
(0|9|7) (5|6) (2) (4|5)
Above regular expression matches 4 digits:The first is one of 0,9 and 7. The second is one of 5 and 6. The third is 2. And the fourth is one of 4 and 5. The above regular expression can be successfully matched to 0525, but it cannot be matched to 9634.
Now,giving you a regular expression like the above formula,and a long string of numbers,please find out all the substrings of this long string that can be matched to the regular expression.

Input
It contains a set of test data.The first line is a positive integer N (1 ≤ N ≤ 1000),on behalf of the regular representation of the N bit string.In the next N lines,the first integer of the i-th line is ai(1≤ai≤10),representing that the i-th position of regular expression has ai numbers to be selected.Next there are ai
numeric characters. In the last line,there is a numeric string.The length of the string is not more than 5 * 10^6.
Output
Output all substrings that can be matched by the regular expression. Each substring occupies one line
Sample Input

4
3 0 9 7
2 5 7
2 2 5
2 4 5
09755420524

Sample Output

9755
7554
0524
题意:

给你N位数,接下来有N行,第i行先输入n,表示这个数的第i 位上可以在接下来的n个数中挑选,然后i 行再输n个数。
然后输入需要匹配的母串,让你输出母串中有多少个可行的N位子串。

分析:

这里用到了STL中的bitset,bitset可以就把他当成一个二进制串,二进制串能进行的操作它都能进行,比如左移位右移位之类的,当然了它还有更多的功能

这里我们用到了reset()方法将位数全部设为0,set(i)方法,将第i位设为1(注意类比二进制第i位是从右往左第i位)

具体bitset用法详见bitset - C++ Reference

现在我们来看一下这道题目:

n位数,每行给若干个数,我们可以这样记录,以出现的每个数为下表,用bitset记录每个数都可以出现在第几个位置,可以出现在这里记为1否则为0,需要一个bitset< MAXN > s[ MAX_DIGIT ]
0: 0001001 (代表数字0可以出现在第0个位置和第3个位置)
1: 0000000
2: 0000000
3: 0000000
.
.
.
9: 0000000

然后用另一个bitset,ans,其中要使两个bitset位数相同,这样才能用&来判断,过程如下:
ans 初始00000…0000
我们先将视野具体到1个位上而不管其他位,我们先只看第0位是怎么运作的
为了判断这一位是否能有数可放,使用按位与运算&,所以第0位我们先设为1
这样就是000…0001
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ i
只看下标i的移动
我们遍历给定的字符串0~len-1
目前判断第0位,用ans&我们之前存的当前数字的bitset,如果这个数字在这一位也是1,那么i位就还是1,否则变成了0。
现在判断完了第0位,将ans左移1位,这样i到了第1位,字符串也向后遍历一位,这样我们再看这个数字能否在第1位出现
00000…010
//////////////////i
00000…101 (假设这是当前数字的bitset)
他们再进行按位与,如果是0就ans中的i位就变成了0,那么我们可以发现以后再往后移动,知道移到n-1位都是0了,换句话说这个位从开始到结束就代表判断一个n位数字,只要前面有一位不匹配了,那么后面都肯定都不匹配了,这就是这个地方的妙处,每次我们判断一下ans[n-1](因为实际从0位开始,长度n就到n-1位)是不是1就知道行不行了,是1说明匹配到了一个n位的子串。

上面我们只解释的一个位1从0位移到n-1位的判断过程,那其他怎么办,很简单,每次左移一位后第0位我们都设为1,这样就像是一个流水线一样,每次都进行同样的操作,每次判断ans[n-1]是不是1就可以了然后输入这一段n位字符串就可以了

具体看代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+50;
char str[5*maxn];
bitset<1005> s[20];
bitset<1005> ans;

int main(){
    int n;
    while(~scanf("%d",&n)){
        for(int i = 0; i < 20; i++){
            s[i].reset();
        }
        ans.reset();
        for(int i = 0; i < n; i++){
            int N,temp;
            scanf("%d",&N);
            for(int j = 0; j < N; j++){
                scanf("%d",&temp);
                s[temp].set(i);
            }
        }
        scanf("%s",str);
        int len = strlen(str);
        for(int i = 0; i < len; i++){
            ans = ans << 1;
            ans[0] = 1;
            ans &= s[str[i]-'0'];
            if(ans[n-1] == 1){
                char temp = str[i+1];
                str[i+1] = '\0';
                printf("%s\n",str+i-n+1);
                str[i+1] = temp;
            }
        }
    }
    return 0;
}
实现labelme批量json_to_dataset方法 labelme可以帮助我们快速的实现Mask-RCNN中数据集json文件的生成,然而还需要我们进一步的将json转成dataset,可以直接在cmd中执行labelme_json_to_dataset.exe C:\Users\Administrator\Desktop\total\1.json(路径),但是这个过程需要我们一个json文件的生成,过程很慢。 一、打开abelm... 阅读详情

相关推荐

OPC与AI智能体集成实战:一人公司的技术栈构建与避坑指南

1. 先搞清楚“一人公司”和“AI工具”到底在解决什么问题 最近看到不少关于“裸辞搞OPC一人公司”和“AI时代骗局”的讨论,结合搜索热词里高频出现的 openclaw 、 AI编程 、 OPC ,我觉得有必要把这里面的水搅一搅,说点实在的。 首先得拆开看。标题里混了三个东西: 一人公司 、 OPC/OpenClaw 、 AI培训 。它们被放在一起讨论“骗局”,但本质上解决的是不同层面的问题。 一人公司 ,或者说个人工作室、独立开发者模式,核心是 用最小化团队(甚至一个人)去承接项目、开发产品或提供服务 。

weixin_29038345的博客 320

Regular Number HDU-5972

Regular Number HDU-5972Regular Number HDU-5972 Regular Number HDU-5972 题意:给出一个由‘|’构成的正则表达式描述的模式串,求出给出文本串中所包含的所有模式子串。 思路:依靠bitset+shif-and匹配算法解决。(shift-and和shift-or算法) 注意:本题把string卡住了,只能用char来进行输入输出。 AC代码如下: #define _CRT_SECURE_NO_WARNINGS #include<io

addmission的博客 169

【遥感数字图像处理(朱文泉)】第四章 变换域处理方法

变换域的处理方法

甜子yu的博客 4308

hdu 5972 Regular Number bitset优化字符串匹配

题目链接 题意: 给一个长度为n的模式子串,子串的每个位置分别可以是一些数字,即一个位置可以被多个数字匹配。再给定 一个母串,问子串可以在哪些位置和母串匹配,并且输出匹配成功后的所有子串. 思路: 建立一个n位的bitset,对于输入的对应位置i可匹配的数字k,将其b[k][i]位置置1,表示该数字可以在第i个位置匹 配,维护一个bitsetans,每次将ans左移一位,并将最

Marcus-Bao的个人主页 1207

告别ROS1思维:在ROS2 Humble上,用Python搞定MoveIt2机械臂控制的完整流程

本文详细介绍了在ROS2 Humble环境下使用Python控制MoveIt2机械臂的完整流程。从环境配置、架构变革到实战操作,涵盖URDF适配、Action接口编程及性能优化技巧,帮助开发者高效迁移ROS1项目至ROS2平台,实现工业级机械臂控制。

weixin_30352645的博客 449

硬件笔记——HDMI接口

HDMI可以同时传输视频信号、音频信号和控制信号。其中高速信号有四组:从Data TX到Data RX有3组差分数据信号(TMDS_DATA0~2)和一组差分时钟信号(TMDS_CLOCK)。以及若干低速线。脚编号信号名称信号类型功能说明1热插拔检测连接状态检测。接收端通过此引脚向源端发送高电平信号,通知其已连接并可以开始读取EDID。2UTILITY车载用途悬空3TMDS数据通道2差分信号正极,用于传输视频像素、音频和数据包。4TMDS数据2屏蔽。

2501_94625908的博客 537

Codeforces - 914F bitset 维护字符串匹配个数

题意:给你一个串,支持两种操作,1修改某个点的字符,2询问[l,r]内模式串P与原串的匹配个数 bitset的写法是真的6啊,简直是优雅暴力的典范 bs[i]表示\(T_i\)与\(P\)匹配与否, 具体地,每次错位按位与依次表示\(T_i,T_{i+1}...T_{i+len2-1}\)与\(P_1,P_2...P_{len2}\)匹配与否 注意的是最后去除重复部分的起始下标应该是\((r-le...

weixin_30780221的博客 226

高效利用ChEMBL数据库:从靶点查询到活性数据处理的完整指南

本文提供了高效利用ChEMBL数据库的完整指南,从靶点查询到活性数据处理。详细介绍了靶点精准定位、高级过滤技巧、数据导出优化以及活性数据清洗、特征工程和可视化等实战技巧,帮助药物研发人员快速获取和处理生物活性数据,提升工作效率。

weixin_29278805的博客 792

Regular Number HDU - 5972(Shift-And匹配)

Regular Number HDU - 5972 题意: 用到了bitset和Shift-And匹配算法 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn = 5e6+10; 4 bitset<1010> B[11], ans; 5 char s[...

weixin_30780649的博客 129

2026.3.13:docker compose运行了Milvus 6个月,占用磁盘近138GB的原因

Docker容器运行Milvus半年后占用138GB磁盘空间,主要原因是容器日志无限增长、容器内写入大量数据未挂载到数据卷,以及未清理临时文件。通过检查发现超大容器目录569035582ce3...占用主要空间。解决方案是使用truncate命令清空容器日志文件(*-json.log),释放磁盘空间。建议配置日志轮转机制,并将数据挂载到宿主机数据卷以避免类似问题。

拥抱具身智能,昇腾Ascend C 194

mojoPortal 路径穿越漏洞复现(CVE-2025-28367)(附脚本)

 在 mojoPortal CMS 版本 <=2.9.0.1 中发现了一个导致 ViewState 反序列化的目录遍历漏洞。通过利用此问题,未经身份验证的攻击者可以泄露 Web 根目录中的敏感文件,包括应用程序的文件。此配置文件包含用于验证和解密 ViewState 数据的文件。知道此密钥后,网络攻击者可以构建恶意 ViewState 有效负载,从而导致在底层服务器上执行远程代码。(CVE-2025-28367)

iSee857的博客 500

cf914F(字符串)

题目链接 bitset用法 搁置了好几天,终于想通...... #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<bitset> using namespace std; const int maxn = 1e5 +...

crystal 412

5、AIX系统硬件管理与故障诊断全解析

本文全面解析了AIX系统的硬件管理与故障诊断方法,涵盖系统管理服务(SMS)的使用、设备兼容性配置、设备配置数据库结构、常用命令如cfgmgr、lsattr、smitty devices的操作详解,并深入介绍了错误日志管理机制,包括errdemon、errpt、errlogger等命令的应用。通过实际案例分析和流程图展示,帮助系统管理员掌握从问题怀疑到诊断执行再到日志清理的完整流程,同时提供注意事项与最佳实践,助力AIX系统的稳定运行与高效维护。

y2z3a4b5c的博客 62

hdu 5972 Regular Number &的字符串快速匹配

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5972 题意: 给你一个目标串长度以及每个位置可能出现的数字,比如第一位可以是1 2 3,第二位可以是4 1 3,这样的话如果匹配串里出现了13,42 ,41 都算是合理的。要你找出这些串并输出。 做法: 很神奇的做法,用bitset来先维护好每一个数字i可以...

人生如戏 193

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Regular Number HDU - 5972 (字符串匹配+bitset妙用)

Regular Number  题目链接:HDU - 5972  题意:一个仅由0~9字符组成的字符串x有n个字符,i位置可选择的字符有ai种,给出一个长串s,找出x能构成的s的所有子串; 思路:用对0~9每个字符建一个长度为n的bitset,若该字符在i位置可供选择,就将对应位置置为1; 再用一个新的bitset与s对应; #include &lt;bits/stdc++.h&gt;...

Sirius_han的博客 337

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU5972 Regular Number(bitset)

Regular Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1645    Accepted Submission(s): 446 Problem Description Using regula

HOrchard 450

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HDU-5972 Regular Number

【HDU-5972 Regular Number】 题意: 给定一个正则表达式, 求一个字符串中所有的匹配。(字符串都是数字字符) 分析: 题目中的正则表达式给定的格式是:给定这个匹配的位数, 然后给定每个位数上的可以匹配的数字。在这里引入STL中的bitset, bitset类可以轻松地设置一个二进制位,对于这道题, 将给定的正则表达式转化成bitset的格式, 对于每一个数字【0-9】将他的所...

YancyKahn 508

HDU 5972 Regular Number Bitset优化字符串匹配

题意: 给一个长度为n的模式子串,子串的每个位置分别可以是一些数字,即一个位置可以被多个数字匹配。再给定一个母串,问子串可以在哪些位置和木串匹配,并且输出匹配成功后的所有子串。 解题方法: 对于每一个数字建立一个bitset,然后对于每个bitset b[i]的数字来说, 如果允许它出现在字串j的位置,就让b[i][j] = 1。维护一个bitset ans,枚举母串的每一个位置i,先将ans

I good vegetable a! 1943

HDU 5972 Regular Number Bitset (字符串匹配shift and/or)

题意: 给一个长度为n的模式子串,子串的每个位置分别可以是一些数字,即一个位置可以被多个数字匹配。 再给定一个母串,问子串可以在哪些位置和母串匹配,并且输出匹配成功后的所有子串. 思路: KMP ?(×)   前后状态互不包含,状态无法转移 AC自动机?(×)   模式串长1000,每个位置至多有10种状态   空间复杂度10^1000 Algorithm:shift a

DT2131 517

hdu5972_Regular Number_快速匹配+bitset

Regular Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 789    Accepted Submission(s): 181 Problem Description Using regular exp

no2015214099的博客 1424

hdu 5972---Regular Number(字符串匹配)/// 还有一个Shift_and算法

Regular Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 789    Accepted Submission(s): 181   Problem Description Using regular expres...

胖亚亚的小酒馆 268

hdu 5972 Regular Number 字符串Shift-And算法 + bitset

题目链接 题意 给定两个串\(S,T\),找出\(S\)中所有与\(T\)匹配的子串。 这里,\(T\)的每位上可以有若干(\(\leq 10\))种选择,匹配的含义是:对于\(S\)的子串的每一位,\(T\)的相应位都有一种选择与之对应。 题解 shift-and算法详解 https://www.douban.com/note/321872072/ 搜出来的题解全都是\(shift-a...

ahu12345678的博客 173

HDU 5972 Regular Number(字符串shift - and算法)

题目链接 HDU5972 2016 ACM/ICPC 大连区域赛 B题 我们预处理出$b[i][j]$,$b[i][j] = 1$的意义是数字$i$可以放在第$j$位。 然后就开始这个匹配的过程。 假设字符串第一位下标从$1$开始 我们每一次处理的子串为$s[i-n+1]$,$s[i-n+2]$, $s[i-n+3]$, ..., $s[i]$ $ans[k] = 1$的含义是 $s...

weixin_30336061的博客 222

HDU5972 Regular Number (bitset匹配)

使用bitset&lt;N&gt; b[10] ,b[i][j]表示值为i的数可以出现在子串的那些位置,即下标,那么对主串进行遍历 i=0:len-1 。另外定义一个变量bitset&lt;N&gt; ans ,每次先将ans左移一位,然后将最低位置1,然后令k=当前输入的数,将ans=ans&amp;b[k], 如果当前ans[N-1]==1,那么主串s[i-N+1]~s[i]就是合法子串,输出...

兜率工的博客 245

HDU 5972 Regular Number(shift and 模板)

/* Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc++.h> #define mp make_pair #define pb push_back #define endl '\n' using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair&

lifehappy 321

hdu 5972 Regular Number(Shift-And算法)

题目链接:hdu 5972 Regular Number 题意: 给你一个字符串,现在让你输出该字符串所有的合法子串。 合法子串定义为:对应位置的字符合法。 对应位置的合法字符会给你。 题解: 据说这是一个名字叫做Shift-And算法。其实就是一个bitset优化的字符串匹配。 这里我将它写成板子。 1 #include<bits/stdc++.h> 2...

weixin_30949361的博客 134
上一篇: Detachment HDU - 5976(数学+逆元+前缀和前缀积)
下一篇: Game of Taking Stones HDU - 5973(java高精度二分开根号+威佐夫博弈)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值