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

2023icpc网络预选赛I. Pa?sWorD(dp)

题目给定字符串长度n以及字符串s

其中出现小写字母可以代表小写字母和大写字母  比如'a'可以代表'a'和'A'

出现'?'可以代表26个小写字母和26个大写字母和10个数字

出现大写字母和数字就是原本的数

同时要求大写字母,小写字母,数字一定都存在替换完的字符串中

相邻的字母不能相同

思路

dp[2][70][8]

第一维代表用来存前一个当前状态和前一个状态

70用来存当前的字符

0-25代表小写字母,26-51代表大写字母,52-61代表大写字母,62代表什么都没有也就是初始状态

8用二进制状态压缩存是否出现过大写,小写,数字

_ _ _第一个存是否出现大写,第二个小写,第三个数字

从前往后枚举

当出现'?'

枚举61中可能(i),然后从前面62种状态(j)所有k继承

假如i是小写字母的话

如果i==j 就continue

其他情况dp[now][i][(k|(1<<2))]+=dp[pre][j][k]

同理i是大写的话就

dp[now][i][(k|(1<<1))]+=dp[pre][j][k]

但是这是一个o(64*64*8*100000)

会超时

你可以发现从前一个状态继承的就是62种状态之和减去唯一一个与当前转台不同的就行了

const int inf=0x3f3f3f3f3f3f3f3f,N=1e5+5,mod=998244353;
int dp[2][70][8];
int jian(int x,int y) {return ((x-y)%mod+mod)%mod;
}
signed main() {ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);int n;cin>>n;string s;cin>>s;s=' '+s+' ';for(int i=1; i<=n; i++) {int now=i&1,pre=1-now;if(i==1) {dp[pre][62][0]=1;}for(int j=0; j<=62; j++) {for(int k=0; k<=7; k++) {dp[now][j][k]=0;}}vector<int>a(10);for(int j=0; j<=62; j++) {for(int k=0; k<=7; k++) {a[k]+=dp[pre][j][k];a[k]%=mod;}}if(s[i]=='?') {for(int j=0; j<26; j++) {for(int k=1; k<=7; k++) {for(int w=0; w<=7; w++) {if((w|(1<<2))==k) {dp[now][j][k]+=jian(a[w],dp[pre][j][w]);dp[now][j][k]%=mod;}}}}for(int j=26; j<52; j++) {for(int k=1; k<=7; k++) {for(int w=0; w<=7; w++) {if((w|(1<<1))==k) {dp[now][j][k]+=jian(a[w],dp[pre][j][w]);dp[now][j][k]%=mod;}}}}for(int j=52; j<62; j++) {for(int k=1; k<=7; k++) {for(int w=0; w<=7; w++) {if((w|(1<<0))==k) {dp[now][j][k]+=jian(a[w],dp[pre][j][w]);dp[now][j][k]%=mod;}}}}}else if(s[i]>='a'&&s[i]<='z') {for(int j=s[i]-'a'; j<=s[i]-'a'; j++) {for(int k=1; k<=7; k++) {for(int w=0; w<=7; w++) {if((w|(1<<2))==k) {dp[now][j][k]+=jian(a[w],dp[pre][j][w]);dp[now][j][k]%=mod;}}}}for(int j=s[i]-'a'+26; j<=s[i]-'a'+26; j++) {for(int k=1; k<=7; k++) {for(int w=0; w<=7; w++) {if((w|(1<<1))==k) {dp[now][j][k]+=jian(a[w],dp[pre][j][w]);dp[now][j][k]%=mod;}}}}} else if(s[i]>='A'&&s[i]<='Z') {int t=s[i]-'A'+26;for(int k=1; k<=7; k++) {for(int w=0; w<=7; w++) {if((w|(1<<1))==k) {dp[now][t][k]+=jian(a[w],dp[pre][t][w]);dp[now][t][k]%=mod;}}}} else {int t=s[i]-'0'+52;for(int k=1; k<=7; k++) {for(int w=0; w<=7; w++) {if((w|(1<<0))==k) {dp[now][t][k]+=jian(a[w],dp[pre][t][w]);dp[now][t][k]%=mod;}}}}// for(int i=0;i<62;i++){// 	for(int k=0;k<=7;k++){// 		cout<<dp[now][i][k]<<' ';// 	}// 	cout<<"\n";// }// cout<<"--------------------\n";
}
int sum=0;
for(int i=0; i<62; i++) {sum+=dp[(n&1)][i][7];sum%=mod;
}
cout<<sum<<"\n";
}

相关文章:

2023icpc网络预选赛I. Pa?sWorD(dp)

题目给定字符串长度n以及字符串s 其中出现小写字母可以代表小写字母和大写字母 比如a可以代表a和A 出现?可以代表26个小写字母和26个大写字母和10个数字 出现大写字母和数字就是原本的数 同时要求大写字母&#xff0c;小写字母&#xff0c;数字一定都存在替换完的字符串中…...

maven本地安装jar包

在实际开发中&#xff0c;有些jar包不能通过公共库下载&#xff0c;只能本地安装。可以按照以下步骤操作&#xff1a; 1、安装命令 mvn install:install-file -DgroupIdcom.chinacreator.sm -DartifactIdfbm-sm-common -Dversion0.0.1 -Dpackagingjar -Dfile../newJar/fbm-sm…...

QT中的inherits

目录 简介&#xff1a; 实例&#xff1a; 简介&#xff1a; 在Qt中&#xff0c;可以使用inherits函数来判断一个对象是否属于某个类或其派生类。inherits函数是QObject类的成员函数&#xff0c;因此只能用于继承自QObject的类的对象。 以下是inherits函数的一般用法&#xf…...

全国职业技能大赛云计算--高职组赛题卷①(容器云)

全国职业技能大赛云计算--高职组赛题卷①&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务1 Docker CE及私有仓库安装任务&#xff08;5分&#xff09;任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续…...

基于springboot+vue的入校申报审批系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

安卓逆向 - EdXposed LSPosed VirtualXposed

一、引言 接上篇&#xff1a;安卓逆向 - Xposed入门教程_小馒头yy的博客-CSDN博客 我们介绍了Xposed入门安装使用&#xff0c;但是只支持到Android 8&#xff0c;并且安装模块需要重启。今天我们来看看Xposed的其他版本。 二、各种Xposed框架对比 1、Xposed 只支持到安卓8&…...

Linux三大搜索指令的区别

find&#xff1a;可以在指定的路径下进行文件的搜索 —— 真的在磁盘文件中查找 例如find /usr/bin/ -name ls which 可以在指令路径下&#xff0c;/usr/bin,搜索指令文件 例如&#xff1a;which ls whereis:在系统特定的路径下查找&#xff0c;既可以找到可执行程序&#xff…...

C++ -- 特殊类设计

目录 设计一个类&#xff0c;不能被拷贝 C98的做法 C11的做法 设计一个类&#xff0c;只能在堆上创建对象 实现方式1 实现方式2 设计一个类&#xff0c;只能在栈上创建对象 实现方式1 方式1的优化 实现方式2 设计一个类&#xff0c;不能被继承 设计模式 什么是设计…...

指针和数组笔试题的透析

指针---进阶篇&#xff08;三&#xff09; 一、前言二、一维数组例题透析&#xff1a;三、指针笔试题1.例一&#xff1a;2.例二&#xff1a;3.例三&#xff1a;4.例四&#xff1a;5.例五&#xff1a;6.例六&#xff1a; 一、前言 那么好了好了&#xff0c;宝子们&#xff0c;从…...

「UG/NX」Block UI 超级点SuperPoint

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#...

Linux——kafka常用命令

一、Kafka的常用命令包括&#xff1a; 1. 启动Zookeeper服务 前台启动&#xff1a; ./bin/zookeeper-server-start.sh config/zookeeper.properties 后台启动&#xff1a; ./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties 2. 停止Zookeeper服务 .…...

GLTF编辑器如何快速重置模型原点

1、什么是模型原点&#xff1f; 模型原点是三维建模中的概念&#xff0c;它是指在一个虚拟三维空间中确定的参考点。模型原点通常位于模型的几何中心或基本组件的中心位置。如图所示&#xff1a; 可以看到模型的原点在模型的几何中心 2、模型原点的作用 知道了什么是模型原点&…...

【STL】vector常见用法及模拟实现(附源码)

目录 前言1. vector介绍及使用1.1vector的介绍1.2 vector的使用1.2.1 构造函数 1.2.2 vector对象遍历1.2.3 reserve和resize1.2.4 insert和erase 2. vector模拟实现2.1 vector迭代器失效问题2.2 模拟实现reserve函数浅拷贝问题2.3模拟实现源码2.3.1 vector.h2.3.2 test.cpp 前言…...

深度学习保姆级教学

文章目录 前言1.深度学习概论2.神经网络1.基础原理2.损失函数3.SoftMax4.前向传播5.反向传播1.反向传播介绍 6 卷积神经网络应用1.检测任务2.超分辨率重构3.医学检测4.无人驾驶5. 人脸识别 6.卷积网络和传统区别7.卷积神经网络1.卷积做了什么&#xff1f;2.节点网络1.Alexnet2.…...

计算机视觉的优势和挑战

计算机视觉&#xff08;CV&#xff09;是一项快速发展的技术&#xff0c;它具有许多优势和挑战。以下是一些可能的例子&#xff1a; 优势&#xff1a; 1. 自动化&#xff1a;CV技术可以自动化任务&#xff0c;例如图像分类、目标检测和跟踪&#xff0c;从而提高生产力和减少人…...

群晖管家+内网穿透实现公网远程访问本地黑群晖

白嫖怪狂喜&#xff01;黑群晖也能使用群晖管家啦&#xff01; 文章目录 白嫖怪狂喜&#xff01;黑群晖也能使用群晖管家啦&#xff01;1.使用环境要求&#xff1a;2.下载安装群晖管家app3.随机地址登陆群晖管家app4.固定地址登陆群晖管家app 自己组装nas的白嫖怪们虽然也可以通…...

Essential C++【读书笔记 思考总结】

本篇博客是学习过程中的笔记、思考和总结。原文链接&#xff1a; 3 泛型编程风格 Generic Programming3.1 指针的算术运算3.2 了解 Iterator&#xff08;泛型指针&#xff09;3.3 所有容器的共通操作 3 泛型编程风格 Generic Programming STL的主要组件&#xff1a;Container&…...

深度学习实战基础案例——卷积神经网络(CNN)基于Xception的猫狗识别|第2例

文章目录 一、环境准备二、数据预处理三、构建模型四、实例化模型五、训练模型5.1 构建训练函数5.2 构建测试函数5.3 开始正式训练 六、可视化精度和损失七、个体预测总结 今天使用轻量级的一个网络Xception做一个简单的猫狗识别案例&#xff0c;我的环境具体如下&#xff1a; …...

Linux Systemd 配置开机自启

博文目录 文章目录 Systemd操作方式配置方式配置示例参考 Systemd Systemd 是一个用于启动、管理和监控 Linux 系统的初始化系统。它是许多现代 Linux 发行版中默认的初始化系统&#xff0c;取代了传统的 SysVinit 和 Upstart。 Systemd 的引入在 Linux 社区引起了一些争议&…...

华为云云耀云服务器L实例评测|轻量级应用服务器对决:基于 fio 深度测评华为云云耀云服务器L实例的磁盘性能

本文收录在专栏&#xff1a;#云计算入门与实践 - 华为云 专栏中&#xff0c;本系列博文还在更新中 相关华为云云耀云服务器L实例评测文章列表如下&#xff1a; 华为云云耀云服务器L实例评测 | 从零开始&#xff1a;云耀云服务器L实例的全面使用解析指南华为云云耀云服务器L实…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...