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

天梯——L1-110 这不是字符串题

代码

#include<bits/stdc++.h>
using namespace std;
int main(){int n,m;cin>>n>>m;string s;for(int i=0;i<n;i++){int x;cin>>x;s+=char(x+'0');}while(m--){int x;cin>>x;if(x==1){int l1;string s1;cin>>l1;for(int i=0;i<l1;i++){int a;cin>>a;s1+=char(a+'0');}int l2;string s2;cin>>l2;for(int i=0;i<l2;i++){int a;cin>>a;s2+=char(a+'0');}int k=s.find(s1);if(k!=-1){s.erase(k,l1);s.insert(k,s2);}}else if(x==2){for(int i=0;i<s.size()-1;i++){
//注意这里i的范围,防止数组越界,i也可i=1;i<s.size(),此时就是s[i-1]+s[i]int t=s[i]+s[i+1];if(t%2==0){string s3;s3+=char(t/2);s.insert(i+1,s3);i++;}}}else{int l,r;cin>>l>>r;reverse(s.begin()+l-1,s.begin()+r);}}for(int i=0;i<s.size();i++){if(i!=s.length()-1) cout<<s[i]-'0'<<" ";else cout<<s[i]-'0';}return 0;
}

分析

本题虽然都在围绕这整数来讲,但是下面的操作涉及替换,查找,插入,翻转,这与字符串的功能很类似,于是我们可以用字符串来做。但输入时是一个整数一个整数输入的,因此我们要把这些数变成一个字符串。变成字符串后s,开始进行查找s.find(s1),如果找不到,返回-1。删除 s.erase(k,l1); 插入s.insert(k,s2);翻转reverse(s.begin()+l-1,s.begin()+r);这里要特别注意翻转的使用

变成字符串操作

for(int i=0;i<n;i++){int x;cin>>x;s+=char(x+'0');}

string s; :声明一个空字符串 s ,用于存储初始序列。

for(int i = 0; i < n; i++) :循环 n 次,读取初始序列的每个数字。

int x; cin >> x; :读取一个整数 x ,表示序列中的数字。

s += char(x + '0' ); :将数字 x 转换为字符并添加到字符串 s 中。

字符串翻转

字符串整体翻转:reverse(s.begin(),s.end())

将字符串的[l,r]翻转: reverse(s.begin()+l-1,s.begin()+r);因为翻转是左闭右开的,而且字符串的下标是从0开始的,因此左边要‘-1’

字符与 ASCII 码值

字符是以 ASCII 码值(美国信息交换标准代码)的形式存储的。每个字符都对应着一个唯一的整数,例如字符 '0' 对应的 ASCII 码值是 48,字符 '1' 对应的是 49,以此类推。当对这两个字符进行加法运算时(int t=s[i]+s[i+1];),实际上是对它们对应的 ASCII 码值进行加法运算。

int t=s[i]+s[i+1];if(t%2==0){string s3;s3+=char(t/2);s.insert(i+1,s3);i++;}

这个代码用的是字符的ASCII码进行加减,因此可以直接s3+=char(t/2);因为t/2本身就是一个字符

也可以

int t=(s[i]-'0')+(s[i+1]-'0');if(t%2==0){string s3;s3+=char(t/2+'0');s.insert(i+1,s3);i++;

此时将字符转化为整数,用整数之间相加减,得到t是一个整数,因此需要用t/2+'0'将其变为一个字符,再添加到字符串 s3中。

注意

一定不要忘记x==2操作时的i++;因为添加一个数后,所添加的数索引为i+1,原来i+1位置上的数变成了i+2;要先i++,将添加的数跳过,那么在for循环中又可以回到原来的i+1上了。

相关文章:

  • Redis高级数据类型解析(二)——Set、Sorted Set与Geo实战指南
  • Android面试题目基础总结(二)
  • Trae+DeepSeek学习Python开发MVC框架程序笔记(四):使用sqlite存储查询并验证用户名和密码
  • [golang] 介绍 | 特点 | 应用场景
  • elasticsearch查询中的特殊字符影响分析
  • 【Hive入门】Hive分区与分桶深度解析:优化查询性能的关键技术
  • 【前端】【业务场景】【面试】在前端开发中,如何实现一个可拖动和可缩放的元素,并且处理好边界限制和性能优化?
  • 【FAQ】针对于消费级NVIDIA GPU的说明
  • 极狐GitLab 合并请求依赖如何解决?
  • Python字符串三剑客:len()、split()、join()深度解析
  • RK3588芯片NPU的使用:官方rknn_yolov5_android_apk_demo运行与解读
  • 【深度学习核心技术解析】从理论到实践的全链路指南
  • x-cmd install | brows - 终端里的 GitHub Releases 浏览器,告别繁琐下载!
  • Stack和Queue和deque的讲解(底层实现 手撕版)
  • ospf综合作业
  • 企业办公即时通讯软件BeeWorks,私有化安全防泄密
  • Java Agent 注入 WebSocket 篇
  • 移动通信行业术语
  • 去掉从网页粘贴到Word的“↓“(向下的箭头)符号的方法
  • SAIL-RK3588协作机器人运动控制器技术方案
  • 《我的后半生》:人生下半场,也有活力重启的可能
  • “家门口的图书馆”有多好?上海静安区居民给出答案
  • 欧盟数字法开出首张罚单:苹果和Meta合计被罚7亿欧元
  • 国际金价冲上3500美元,本月已涨超12%!分析人士提醒:警惕短期多头获利了结
  • “何以中国·闽山闽水物华新”网络主题宣传活动在福建武夷山启动
  • 上交所召开私募机构座谈会,与会机构:中国资产具备显著估值修复和提升潜力,将坚定持有