当前位置: 首页 > news >正文

【学习笔记】DFA的构造

虽然平时做过但是考场上肯定还是不会,不过没事干还是写一下吧

Myhill-Nerode\text{Myhill-Nerode}Myhill-Nerode 定理:给定一个语言LLL,定义在字符串上一个关系为,若对于所有的zzzxzxzxzLLL中当且仅当yzyzyzLLL中,则称x,yx,yx,y在同一个等价类中。因此它把所有有限字符串的集合划分成一个或多个等价类。

Myhill-Nerode\text{Myhill-Nerode}Myhill-Nerode 定理声称在LLL的最小自动机中状态的数目等价于在LLL中诱导出的等价类的数目。

容易发现,语言LLL可以被有限状态机接受,当且仅当等价类的数目是有限的。

Gym 102586J

考虑用等价类构造DFADFADFA,还要为每一类找一个代表元。这里必须指出的是,LLL中的字符串一定在同一个等价类中,这个等价类也是接收点。

这里假定有限字符串集合长度不超过LLL,然后暴搜求出每个字符串的等价类即可。

如何证明取L=10L=10L=10的正确性?思维小实验

假设存在一个DFADFADFA d(k)d(k)d(k)能正确识别长度不超过kkk的好串,据此可以构造出一个NFANFANFA能正确识别长度不超过k+2k+2k+2的好串(其构造方法是,在原DFADFADFA的基础上建立ϵ\epsilonϵ,然后建一个子DFADFADFA表示操作的长度为333的段,再用ϵ\epsilonϵ连回在原DFADFADFA中所对应的字符边即可),再将其转化为DFADFADFA d(k+2)d(k+2)d(k+2)(最常用的方法是幂极构造),并最小化。

如果d(k)d(k)d(k)等价于d(k+2)d(k+2)d(k+2),我们就能得到d(k)=d(k+2)=d(k+4)=⋯d(k)=d(k+2)=d(k+4)=\cdotsd(k)=d(k+2)=d(k+4)= ,这也就是我们所要求的DFADFADFA。验证即可。

CF956F

考虑构造一个FAFAFA来识别不超过nnn位的f(m)≤kf(m)\le kf(m)k的数字串

FAFAFA的状态是背包容量,字母表是0∼90\sim 909,原来状态是ccc,读入一个数字ddd,可以转移到c+dc+dc+d∣c−d∣|c-d|cd,显然这是一个NFANFANFA,可以设置状态数为100100100,然后大力幂集转移。

可以用长度为100100100bitset\text{bitset}bitset实现幂集,用一个哈希表记录某个bitset\text{bitset}bitset出现过没有。

理论复杂度O(2100)O(2^{100})O(2100)。这非常不科学。这种方法还是比较大胆的。

我完全没这个魄力好吧

#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int N=1e5+5;
int n,K,tot,to[N][10],c[100],len;
ll l,r,dp[N][20][10];
map<__int128,int>id;
__int128 has(bitset<100>&b){__int128 x=0;for(int i=99;i>=0;i--){x*=2;if(b[i])x++;}return x;
}
int dfs(bitset<100>&b){int x;if(id[has(b)])return id[has(b)];x=id[has(b)]=++tot;for(int i=0;i<10;i++){if(b._Find_first()<=i)dp[tot][0][i]=1;}for(int i=0;i<10;i++){bitset<100>b2=(b<<i)|(b>>i);for(int j=0;j<i;j++)if(b[j])b2[i-j]=1;to[x][i]=dfs(b2);}return x;
}
ll dfs2(int x,int y,int z){if(!z)return dp[y][x][K];if(x==0)return dp[y][0][K];ll res=0;for(int i=0;i<=c[x];i++){res+=dfs2(x-1,to[y][i],i==c[x]);}return res;
}
ll solve(ll x){len=0;while(x)c[++len]=x%10,x/=10;return dfs2(len,1,1);
}
int main(){bitset<100>e;e[0]=1;int T;cin>>T,dfs(e);for(int l=0;l<10;l++){for(int i=1;i<=18;i++){for(int j=1;j<=tot;j++){for(int k=0;k<10;k++){dp[j][i][l]+=dp[to[j][k]][i-1][l];}}} }while(T--){cin>>l>>r>>K;cout<<solve(r)-solve(l-1)<<"\n";}
} 

相关文章:

【学习笔记】DFA的构造

虽然平时做过但是考场上肯定还是不会&#xff0c;不过没事干还是写一下吧 Myhill-Nerode\text{Myhill-Nerode}Myhill-Nerode 定理&#xff1a;给定一个语言LLL&#xff0c;定义在字符串上一个关系为&#xff0c;若对于所有的zzz&#xff0c;xzxzxz在LLL中当且仅当yzyzyz在LLL中…...

MyBatis 之二(增、删、改操作)

文章目录1. 修改操作1.1 在 mapper&#xff08;interface&#xff09;里面添加修改方法的声明1.2 在 XMl 中添加 <update> 标签和修改的 sql 代码1.3 在 UserMapper 中右键 Generate 点击 Test 生成 update 测试类2. 删除操作2.1 在 mapper &#xff08;interface&#x…...

28k入职腾讯测试岗那天,我哭了,这5个月付出的一切总算没有白费~

先说一下自己的个人情况&#xff0c;计算机专业&#xff0c;16年普通二本学校毕业&#xff0c;经历过一些失败的工作经历后&#xff0c;经推荐就进入了华为的测试岗&#xff0c;进去才知道是接了个外包项目&#xff0c;不太稳定的样子&#xff0c;可是刚毕业谁知道什么外包不外…...

【surfaceflinger源码分析】surfaceflinger进程的消息驱动模型

概述 对于surfaceflinger大多数人都知道它的功能是做图形合成的&#xff0c;用英语表示就是指composite。其大致框图如下: 各个Android app将自己的图形画面通过surface为载体通过AIDL接口(Binder IPC)传递到surfaceflinger进程surfaceflinger进程中的composition engine与HW…...

「架构师」001计算机组成与体系结构

文章目录 前言一、计算机结构1.1 计算机组成结构1.2 CPU组成1.3 冯诺依曼结构与哈佛结构二、存储结构2.1 层次化存储结构2.2 Cache三、数据传输控制方式四、总线五、CISC与RISC六、流水线七、校验码八、嵌入式前言 本文主要介绍计算机组成与体系结构。 一、计算机结构 1.1 计…...

既然有HTTP协议,为什么还要有RPC

既然有HTTP协议&#xff0c;为什么还要有RPC&#xff1f; 从TCP聊起 作为一个程序员&#xff0c;假设我们需要在A电脑的进程发一段数据到B电脑的进程&#xff0c;我们一般会在代码里使用socket进行编程。 这时候&#xff0c;我们可选项一般也就TCP和UDP二选一。TCP可靠&…...

【新2023】华为OD机试 - 选座位(Python)

华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 选座位 题目 疫情期间需要大家保证一定的社交距离 公司组织开交流会议,座位有一排共N个座位 编号分别为[0...n-1] 要求员工一个接着一个进入会议室 并且还可以在任何时候离开会议室 每当一个员工进入时…...

数据分析与SAS学习笔记4

INPUT语句&#xff1a;格式修饰符&#xff1a; “:” 修饰符。表示从下一个非空格列读入数据&#xff0c;直到:1 遇到再下一个空格列&#xff1b; 2 读到预先定义的变量长度&#xff1b; 3 数据行结束。哪个先出现就在哪儿结束。 “&” 修饰符。表示从下一个非空格列读入…...

Xepor:一款针对逆向工程和安全分析的Web路由框架

关于Xepor Xepor是一款专为逆向分析工程师和安全研究专家设计的Web路由框架&#xff0c;该工具可以为研究人员提供类似Flask API的功能&#xff0c;支持以人类友好的方式拦截和修改HTTP请求或HTTP响应信息。 该项目需要与mitmproxy一起结合使用&#xff0c;用户可以使用Xepor…...

Hadoop核心组成和生态系统简介

一、Hadoop的概念 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统&#xff08; Distributed File System&#xff09;&am…...

Flutter-Charts_painter大数据量绘制性能优化-数据收敛

Flutter-Charts_painter大数据量绘制性能优化-数据收敛 1、背景介绍 HRV测量仪器上传的数据&#xff0c;每秒有250个数据&#xff0c;业务上需要测量180秒&#xff0c;预计有3w-5w个数据点需要绘制到折线图上去。Charts_painter绘制这么大的数据是时候会有些卡顿&#xff0c;…...

使用 GeForce Experience 更新 NVIDIA GPU 显卡驱动

使用 GeForce Experience 更新 NVIDIA GPU 显卡驱动1. NVIDIA GeForce Experience 2. 驱动程序 -> 检查更新文件 3. 下载 如果有可用的新版驱动的话&#xff0c;点击后方的 [下载] 按钮即可。 4. 安装 [快速安装] 按照默认设置安装驱动&#xff0c;[自定义安装] 可以自行…...

Java泛型的<? super T>,<? extend T>的区别

&#xff1f; extends T ? extends T 描述了通配符上界, 即具体的泛型参数需要满足条件: 泛型参数必须是 T 类型或它的子类, 例如: List<? extends Number> numberArray new ArrayList<Number>(); // Number 是 Number 类型的 List<? extends Number>…...

如何做出好看的Excel可视化图表?

可视化死磕excel是不行的&#xff0c;作为数据分析行业的偷懒大户&#xff0c;分享一些我在可视化工具上的使用心得&#xff0c;总结了三大类&#xff1a;快速出图类、专业图表类、高端大屏类。个人经验&#xff0c;大家按需采纳&#xff1a; 一、快速出图类 如果你只是因为偶…...

智能吸吹一体式方案设计特点

一、家用吸吹一体吸尘器方案研发设计要素&#xff1a; 1.小巧的机身设计&#xff0c;一手掌握&#xff0c;无论是床底、沙发下还是家具缝隙之中都能够使用。 2.无线&#xff0c;插电两用&#xff0c;在家方便可插电使用。内置可充电锂电池&#xff0c;充满电也可无线使用。 3.采…...

CSDN 编辑器 Marddown 语法备忘

原文链接&#xff1a;https://blog.csdn.net/blogdevteam/article/details/103478461 本文对其二次加工&#xff0c;增加渲染样式、补充例程、添加未收录的常用语法。 CSDN Markdown 编辑器遵循 CommonMark spec 语法规范。 快捷键 撤销&#xff1a;Ctrl/Command Z 重做&…...

回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测

回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测 目录回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 Matlab实现NGO-BiLSTM北方苍鹰算法…...

Linux——操作系统安装

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…...

AFLNET lightftp项目报错解决方法

在学习AFLNET的时候&#xff0c;本人尝试对示例项目中的lightftp进行fuzz,而后出现如下报错&#xff1a; AFLNet - the states hashtable should always contain an entry of the initial state 在github项目issue里看到了有人的问题和我一摸一样&#xff0c;Stack Overflow里…...

av 146 003

121. 团队章程的目标是什么? A. 使团队正规化&#xff0c;以便能够清楚地了解资源分配和参与情况 B. 创造一个团队可以自我管理和自我指导的环境 C. 创造一个环境&#xff0c;使团队成员能够尽其所能地工作 D. 创造一种团队归属感&#xff0c;促进包容性和协作性的行为 12…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...