【蓝桥每日一题]-字符串(保姆级教程 篇1)#atcoder324C~E题
今天来讲字符串题型
目录
题目:atcoder324C题
思路:
题目:atcoder324D题
思路:
题目:atcoder324E题
思路:
题目:atcoder324C题
给一个T字符串,然后给出n个S串,对于每个一个S串若可以经过一次字符修改,删除,添加可以变成T串,则输出该串的序号。
思路:
(c题一般不是很难,只要有点基础基本可以敲出来)
修改:两个串长度相等,且只有一个字符是不同的(这个最好处理)
删除:T只比S小1,且T串一定是S的子串
添加:S只比T小1,且S串一定是T的子串(这两种都是只需要判断是不是子串即可)
相信你也注意到了,对于比给定串恰好大1的情况,完全可以使用子串匹配来做
#include <bits/stdc++.h>
using namespace std;
const int MAX_N=500000;
int ans[MAX_N],ans_num;
int check1(string s1,string s2){//判断s1和s2是不是只有1个或0个不同int res=0,sz=s1.size();for(int i=0;i<sz;i++){if(s1[i]!=s2[i])res++;}if(res<=1)return 1;else return 0;
}
int check2(string s1,string s2){//判断s1是否是s2的子串,因为s2只比s1大1,所以非常简单int sz=s1.size(),r=sz,l=0;for(int i=0;i<sz;i++){if(s1[i]!=s2[l])break;l++;}for(int i=sz-1;i>=0;i--){if(s1[i]!=s2[r])break;r--;}return l>=r;
}
int main(){int n; string t;cin>>n>>t;int sz=t.size();for(int i=1;i<=n;i++){string s; cin>>s;int sz1=s.size();if(sz1==sz){if(check1(t,s)) ans[++ans_num]=i;}else if(sz+1==sz1){if(check2(t,s)) ans[++ans_num]=i;}else if(sz==sz1+1){if(check2(s,t)) ans[++ans_num]=i;}}cout<<ans_num<<'\n';//满足题意的个数for(int i=1;i<=ans_num;i++){cout<<ans[i];//输出序号if(i+1<=ans_num) cout<<' ';else cout<<'\n';}}
题目:atcoder324D题
给一个长n的字符串,问进行排列后最多能拼成几个完全平方数 (n<13)
思路:
最不应该的做法就是将字符串进行全排列然后逐个检查,因为阶乘太大了一定会超时。
应该先把小于最大n的平方数全部打表出来,然后检查每个平方数是不是这个字符串的重排列:
这里要用到to_string函数可以快速将数型转化成字符型,然后检查重排列即可。
如何检查一个字符串是不是另一个的重排列呢?
方法:将两个字符串都排序一下,然后检查排序后的一样不一样即可。
注意一点:字符串100应该等于1和100,但是只有数字100的字符串(001)和字符串100的(001)完全相同,数字1的字符串需要自动添加前缀(00)才能!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=500000;
int main(){int n;string s;//输入长度和字符串cin>>n>>s;sort(s.begin(),s.end());//默认升序if(s.back()=='0'){cout<<"1\n";return 0;}int ans=0;for(ll x=1;;x++){//逐个比较每个字符串ll tmp=x*x;//防止隐式转化越界,故x为ll型string t=to_string(tmp);//to_string() stoi ll d()int st=t.size();if(st>n) break;else {sort(t.begin(),t.end());t=string(n-st,'0')+t;//t长度不够,自动加一定数量的‘0’if(s==t) ans++;}}cout<<ans<<'\n';
}
最后:补充一下string的排序,两种降序办法
bool cmp(char a,char b){return a>b;
}
int main(){string s;cin>>s;sort(s.begin(),s.end());//方法1sort(s.begin(),s.end());//方法2reverse(s.begin(),s.end());//方法2cout<<s;
}
题目:atcoder324E题
给一个t字符串和n个字符串,我们将n个字符串进行n^2次相互拼接,问最终t会是几个拼接成的字符串的子序列(N<=5e5)
思路:
补充:子序列 && 子串:子序列不是字符串可以跳跃下标,子串是字符串不能跳跃下标
t是拼接成的字符串的子序列,就相当于 前部分字符串的子序列字符个数 加 后部分字符串子序列字符个数 大于等于t即可
统计子序列方法:串的子序列字符个数就是当前的下标数,贪心统计即可 。
然后就转变成了从两个数组中分别找一个数相加大于指定数值的问题:两种O(N)方法,一种是后缀和统计法,另一种就是lower_bound,upper_bound
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;//后缀和统计法:将元素的数值直接填入标记数组中,然后使用后缀和计算个数
const int N=500050;//测试点有个500000整的,很恶心
int ar[N];
ll sum[N],ans;
int main(){int n;string t;cin>>n>>t;int st=t.size();string s[n];for(int i=0;i<n;i++)cin>>s[i];for(int i=0;i<n;i++){//遍历每个字符串int ptr=0;for(int j=0,sz=s[i].size();j<sz;j++){if(ptr<st&&t[ptr]==s[i][j])ptr++;//统计每个对应的子序列字符的个数,个数也是下标数}ar[ptr]++;//将数值填入标记数组}for(int i=st;i>=0;i--)sum[i]=sum[i+1]+ar[i];//后缀和数组reverse(t.begin(),t.end());//颠倒一下,把统计后缀子序列问题转化成统计前缀子序列问题for(int i=0;i<n;i++){int ptr=0;reverse(s[i].begin(),s[i].end());for(int j=0,sz=s[i].size();j<sz;j++){//一模一样的代码if(ptr<st&&t[ptr]==s[i][j])ptr++;}ans+=sum[st-ptr];//st是最大值}cout<<ans<<'\n';
}//做法二 lower_bound:将数组数值排序,然后二分查找满足条件的临界数的下标,向后计算个数即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=500050;
int ar[N],br[N];
ll ans;
int main(){int n,len1=0,len2=0;string t;cin>>n>>t;int st=t.size();string s[n];for(int i=0;i<n;i++)cin>>s[i];for(int i=0;i<n;i++){int ptr=0;for(int j=0,sz=s[i].size();j<sz;j++){if(ptr<st&&t[ptr]==s[i][j])ptr++;}ar[len1++]=ptr;//直接保存数据}sort(ar,ar+len1);//默认升序reverse(t.begin(),t.end());for(int i=0;i<n;i++){int ptr=0;reverse(s[i].begin(),s[i].end());for(int j=0,sz=s[i].size();j<sz;j++){if(ptr<st&&t[ptr]==s[i][j])ptr++;}int pos=lower_bound(ar,ar+len1,st-ptr)-ar;//找到下标ans+=len1-pos;//后面的都是满足的}cout<<ans<<'\n';
}
相关文章:
【蓝桥每日一题]-字符串(保姆级教程 篇1)#atcoder324C~E题
今天来讲字符串题型 目录 题目:atcoder324C题 思路: 题目:atcoder324D题 思路: 题目:atcoder324E题 思路: 题目:atcoder324C题 给一个T字符串,然后给出n个S串,对…...
4.2.1 SQL语句、索引、视图、存储过程
怎么执行一条select语句 1.连接器 接收连接-》管理连接-》校验用户信息 2.查询缓存 kv存储,命中直接返回,否则继续执行 8.0已经删除 3.分析器 词法句法分析生成语法树 4.优化器 指定执行计划,选择查询成本最小的计划 5.执行器 根据执行计划&a…...
1992-2021年全国各地级市经过矫正的夜间灯光数据(GNLD、VIIRS)
1992-2021年全国各地级市经过矫正的夜间灯光数据(GNLD、VIIRS) 1、时间:1992-2021年3月,其中1992-2013年为年度数据,2013-2021年3月为月度数据 2、来源:DMSP、VIIRS 3、范围:分区域汇总&…...
机器人的触发条件有什么区别,如何巧妙的使用
简介 维格机器人触发条件,分为3个,分别是: 有新表单提交时、有记录满足条件时、有新的记录创建时 。 看似3个,其实是能够满足我们非常多的使用场景。 本篇将先介绍3个条件的触发条件,然后再列举一些复杂的触发条件如何用现有的触发条件来满足 注意: 维格机器人所有的…...
【Qt6】QStringList
2023年10月31日,周二上午 QStringList 是 Qt 中的一个类,用于存储一组字符串。它提供了一些方便的方法来操作和管理字符串列表。 QStringList 可以用于存储任意数量的字符串,并提供了一些常用的操作,例如添加、删除、查找、排序等…...
代码随想录算法训练营第五十三天|309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费
309. 买卖股票的最佳时机含冷冻期 int maxProfit(int* prices, int pricesSize){int len pricesSize;int dp[len][4];dp[0][0] -prices[0];dp[0][1] 0;dp[0][2] 0;dp[0][3] 0;for (int i 1; i < pricesSize; i){dp[i][0] fmax(dp[i-1][0], fmax(dp[i-1][1] - prices…...
厚黑学笔记
厚黑学 我现在的情况就是在听书听到一半,但在软件上看书已经看完了,厚黑学要讲的东西大概已经摸清楚了。 总体来说,厚黑学里面的章节内容有一点沾边的嫌疑(看完后的想法),但这本书还是有值得阅读的,但主讲…...
IDEA MyBatisX插件介绍
一、前言 前几年写代码的时候,要一键生成DAO、XML、Entity基础代码会采用第三方工具,比如mybatis-generator-gui等,现在IDEA或Eclipse都有对应的插件,像IDEA中MyBatisX就是一个比较好用的插件。 二、MyBatisX安装配置使用 MyBa…...
【PyQt学习篇 · ②】:QObject - 神奇的对象管理工具
文章目录 QObject介绍Object的继承结构测试QObject对象名称和属性QObject对象名称和属性的操作应用场景 QObject父子对象QObject父子对象的操作 QObject的信号与槽QObject的信号与槽的操作 QObject介绍 在PyQt中,QObject是Qt框架的核心对象之一。QObject是一个基类…...
【AcWing】1.1.3二分搜索
一、二分搜索 1、查找数的范围 原题链接 这道题看似是二分搜索的题目,实则就是二分搜索。与一般的搜索不同的是,若查找元素重复,则分别返回重复元素的左端下标和右端下标,若不存在则返回“-1 -1。我们常用的二分搜索是返回的…...
【Python第三方包】串口通信(pySerial包)
文章目录 前言一、串口的基本使用1.1 配置串口基本信息1.2 读取串口数据1.3 写串口1.4 关闭串口二、示例代码2.1 示例1: 从串口读取数据2.2 示例2: 向串口写入数据总结前言 串口通信是许多嵌入式和物联网应用中的关键组成部分。Python 提供了许多第三方库来简化串口通信的实现…...
VS Code2023安装教程(最新最详细教程)附网盘资源
目录 一.简介 二.安装步骤 三.VS Code 使用技巧 网盘资源见文末 一.简介 VS Code是一个由微软开发的跨平台的轻量级集成开发环境(IDE),被广泛用于编写各种编程语言的代码。它支持多种编程语言,并且可以通过插件扩展功能。 以…...
最优值函数
一、最优状态值函数 解决强化学习任务大致上意味着找到一种政策,能够在长期内实现很多奖励。对于有限MDPs,我们可以精确地定义一种最优政策,其定义如下。值函数定义了政策的一种部分排序。如果一个政策的预期回报大于或等于另一个政策π0在所…...
软考系统架构师知识点集锦十:计算机网络、数学与经济管理、知识产权与标准化
一、计算机网络 1.1、考情分析 2.1 TCP/IP协议簇 2.1.1常见协议及功能 网际层是整个TCP/IP体系结构的关键部分,其功能是使主机可以把分组发往任何网络并使分组独立地传向目标。 POP3: 110 端口,邮件收取SMTP: 25 端口,邮件发送FTP: 20数据端口/21控制…...
风云七剑攻略,最强阵容搭配
今天的风云七剑攻略最强阵容搭配给大家推荐以神仙斋减怒回血为主的阵容。 关注【娱乐天梯】,获取内部福利号 首先,这个角色在这个阵容当中,所有的角色当中,他的输出系数是最高的,已经达到了200%的层次,而且…...
关于ABB 机器人多任务的建立
关于ABB 机器人多任务的建立.需要实时监控某一区域,或者某一信号,或者计件到达某一数量机器人自动停止报警,显示到示教器上,多任务可以实现,类似发那科机器人后台逻辑指令 当软件选项漏选或者少选可以选择修改选项&…...
【计算机网络笔记】传输层——多路复用和多路分用
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
【PC】特殊空投-2023年10月
亲爱的玩家朋友们,大家好! 10月特殊空投活动来袭。本月我们也准备了超多活动等着大家来体验。快来完成任务获得丰富的奖励吧!签到活动,每周一次的PUBG空投节,还有可以领取PGC2023免费投票劵的活动等着大家!…...
Android Studio 下载地址
一、Android Studio 下载地址及版本说明 1.Android 开发者官网:(1)Android Developers (全球,需科学上网) (2)https://developer.android.google.cn/index.html (国内&a…...
General error: 2006 MySQL server has gone away thinkphp6.0 报这个错误怎么修改
"General error: 2006 MySQL server has gone away" 错误表示 MySQL 服务器连接已断开或超时,导致无法继续进行数据库操作。 在 ThinkPHP 6.0 中,您可以通过以下方法来解决这个问题: 调整 MySQL 服务器的超时设置:您可…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
