江苏网站建设包括哪些/网站的收录情况怎么查
今天来讲字符串题型
目录
题目: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 服务器的超时设置:您可…...

08 _ 栈:如何实现浏览器的前进和后退功能?
浏览器的前进、后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面a-b-c之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a。当你后退到页面a,点击前进按钮,就可以重新查看页面b和c。但是,如果你后退到页面b后,点击了新的页面d,那就无法再通过前进、后退…...

【T】分治与倍增
分治,分而治之,其中最经典的便是二分 一、二分 一种经典而且非常好用的思想 将原问题对半转换成两个问题,子问题又继续转换成两个问题,许多子问题会很显然对答案没有关系,所以能讲原本O(n)的东西转化为O(logn) 但一般…...

后门分析及示例
代码分析,关键字定位 传一个asp文件 输入账户错误会提示:非法登录; 逆向工程抓取这个关键字定位 查找代码里面的关键字,定位到关键字后把代码复制出来, 修改exec执行函数为msgbox消息弹出用gb2312方式保存成VBS文件.…...

Vue 的双向数据绑定是如何实现的?
目录 1. 响应式数据 2. v-model 指令 3. 实现原理 4. 总结 Vue.js 是一款流行的前端 JavaScript 框架,它以其强大的双向数据绑定能力而闻名。双向数据绑定使得数据在视图和模型之间保持同步,并且任一方的变化都会自动反映到另一方。那么,…...

Android环境变量macOS环境变量配置
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览macOS基础知识 三、设置环境变量3.1 终…...

设计模式(全23种)
1.前言 1.CUML类图 面向对象设计主要就是使用UML的类图,类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。下面基于C这门语…...

腾讯云轻量应用服务器“月流量”不够用怎么办?
腾讯云轻量应用服务器“月流量”不够用怎么办?超额部分支付流量费,价格为0.8元/GB。腾讯云轻量服务器月流量什么意思?月流量是指轻量服务器限制每月流量的意思,不能肆无忌惮地使用公网,流量超额需要另外支付流量费&…...

【esp32]VSCode-SPI控制OLED
根据Adafruit_GFX第三方库,其drawPixel方法由子类实现 代码:在OLED实现函数功能 先声明类 SPI库和Adafruit库、SSD1306 #include <Arduino.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> …...

vue 的一些拦截
Vue.js 允许你在应用程序中进行路由和HTTP请求的拦截,以便在特定条件下执行操作或处理数据。以下是一些关于拦截的常见用例: 路由拦截: 你可以使用Vue Router来拦截路由导航。这通常用于权限控制,例如,当用户未登录时…...

iview表单提交验证特殊组件时需要注意的问题
使用iview的朋友们,对于表单验证肯定不陌生,通过validate来进行提交时的参数验证,一般来说,对于select或者input之列的表单组件,比较好判断, { required: true, message: ‘The name cannot be empty’, tr…...