CCF CSP 第37次(2025.03)(3_模板展開_C++)(哈希表+stringstream)

CCF CSP 第37次(2025.03)(3_模板展開_C++)

      • 解題思路:
        • 思路一(哈希表+stringstream):
      • 代碼實現
        • 代碼實現(思路一(哈希表+stringstream)):
        • 部分代碼解讀

時間限制: 1.0 秒
空間限制: 512 MiB
原題鏈接
在這里插入圖片描述

解題思路:

思路一(哈希表+stringstream):

1、解題步驟拆分:
① 數據輸入:

  • 第一行輸入一個整數n(模板語言的語句數量)。
  • 接下來 n 行,每行一個語句。

② 數據處理:

  • 表達式中 $ a 代表 a 為字符串變量 ,表達式無 $ 則代表普通字符串 如 “a”
  • 存在三種類型:
    ????? 類型1:第一個元素為1,此時第二個元素為變量,后邊元素為表達式(表達式中的變量 無需 轉換成對應的值)
    ????? 類型2:第一個元素為2,此時第二個元素為變量,后邊元素為表達式(表達式中的變量 需要 轉換成對應的值)
    ????? 類型3:第一個元素為3,此時第二個元素為變量,后邊表達式中存在變量需轉換($)后輸出,且輸出的是字符串的長度。

在這里存儲變量的一一對應關系可以想到哈希表

③ 數據輸出:即 數據處理中的類型 3 。

代碼實現

代碼實現(思路一(哈希表+stringstream)):
#include<iostream>
#include<vector>
#include<sstream>
#include<unordered_map>
using namespace std;// 這個函數用來根據給定的表達式計算結果,表達式可以包含變量。
// `expr` 是表達式,`variables` 是存儲所有變量及其值的映射。
string evaluate_expression(const string &expr, unordered_map<string, string> &variables){stringstream ss(expr);  // 用 stringstream 逐步處理表達式string part, result;// 將表達式按空格分割并逐個處理while (ss >> part) {// 如果部分是變量(以 '$' 開頭),從 variables 中獲取對應的值if (part[0] == '$') {string var_name = part.substr(1);  // 去掉 '$',提取變量名result += variables[var_name];  // 拼接變量的值到結果字符串} else {result += part;  // 如果不是變量,直接拼接字符串}}return result;  // 返回最終的拼接結果
}int main(int argc, char const *argv[]) {int n;  // 模板語言的語句數量cin >> n;cin.ignore();  // 忽略輸入中的換行符unordered_map<string, string> variables;  // 存儲已定義的變量及其值unordered_map<string, string> delayed;  // 存儲待延遲求值的表達式// 處理接下來的 n 行,每行為一個語句for (int i = 0; i < n; i++) {string line;getline(cin, line);  // 讀取每一行輸入stringstream ss(line);string type;ss >> type;  // 讀取語句的類型(1、2 或 3)if (type == "1") {  // 類型 1: 定義變量string var, expr;ss >> var;  // 讀取變量名getline(ss, expr);  // 讀取變量表達式// 計算表達式的值并將結果存入變量中string value = evaluate_expression(expr, variables);variables[var] = value;  // 存儲變量及其計算后的值} else if (type == "2") {  // 類型 2: 延遲定義變量string var, expr;ss >> var;  // 讀取變量名getline(ss, expr);  // 讀取變量表達式// 將變量和對應的表達式存入 delayed 中delayed[var] = expr;} else if (type == "3") {  // 類型 3: 輸出變量的長度string var;ss >> var;  // 讀取變量名// 如果變量不存在于 delayed 和 variables 中,輸出 0if (!delayed.count(var) && !variables.count(var)) {cout << 0 << endl;continue;}// 如果變量在 delayed 中,先計算其值并存入 variablesif (delayed.count(var)) {string expr = delayed[var];string value = evaluate_expression(expr, variables);variables[var] = value;}// 輸出變量的值的長度,取模 1000000007string value = variables[var];cout << value.length() % 1000000007 << endl;}}return 0;  // 程序結束
}
部分代碼解讀
//stringstream的用法
void function_stringstream (){//1、將字符串轉換為整數stringstream ss1("123");int num1;ss1>>num1;cout<<num1<<endl;//2、將整數轉換為字符串stringstream ss2;int num2=123;ss2<<num2;string str=ss2.str();cout<<str<<endl;//3、逐步解析字符串stringstream ss3("10 20 30");int a,b,c;ss3>>a>>b>>c;cout<<a<<b<<c<<endl;//4、字符串拼接stringstream ss4;int num4=10;string str4= "The number is ";ss4<<str4<<num4;string result = ss4.str();cout<<result<<endl;}

歡迎大家和我溝通交流(????)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82346.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據安全管理進階:81頁 2024數據安全典型場景案例集【附全文閱讀】

《2024 數據安全典型場景案例集》聚焦政務數據安全&#xff0c;覆蓋數據細粒度治理、授權運營、接口安全、系統接入、批量數據共享、使用側監管、風險監測、賬號管控、第三方人員管理、密碼應用等十大典型場景&#xff0c;剖析各場景風險并提供技術方案&#xff0c;如基于 AI 的…

Leetcode 261. 以圖判樹

1.題目基本信息 1.1.題目描述 給定編號從 0 到 n - 1 的 n 個結點。給定一個整數 n 和一個 edges 列表&#xff0c;其中 edges[i] [ai, bi] 表示圖中節點 ai 和 bi 之間存在一條無向邊。 如果這些邊能夠形成一個合法有效的樹結構&#xff0c;則返回 true &#xff0c;否則返…

【ISAQB大綱解讀】LG 1-8:區分顯性陳述和隱性假設(R1)

軟件架構師&#xff1a; 應明確提出假設或先決條件&#xff0c;從而防止隱性假設 知道隱性假設可能會導致利益相關方之間的潛在誤解 1. 應明確提出假設或先決條件&#xff0c;防止隱性假設 為什么重要&#xff1f; 隱性假設是架構風險的溫床 例如&#xff1a;假設“所有服務都…

IT運維工具的選擇標準有哪些?

選擇IT運維工具時&#xff0c;可參考以下標準&#xff0c;確保工具適配業務需求且高效易用&#xff1a; 1. 明確業務需求與場景 ? 核心目標&#xff1a;根據運維場景&#xff08;如監控、自動化、安全等&#xff09;匹配工具功能。例如&#xff0c;監控大規模集群選Promethe…

MySQL 核心知識整理【一】

一、MySQL存儲引擎對比&#xff1a;InnoDB vs MyISAM 在使用MySQL時&#xff0c;選擇合適的存儲引擎對性能影響很大。最常見的兩個引擎是 InnoDB 和 MyISAM&#xff0c;它們各自的設計目標不同&#xff0c;適用場景也不一樣。 事務與數據安全性方面&#xff0c;InnoDB 支持事…

人工智能在智能制造業中的創新應用與未來趨勢

隨著工業4.0和智能制造的快速發展&#xff0c;人工智能&#xff08;AI&#xff09;技術正在深刻改變制造業的各個環節。從生產自動化到質量檢測&#xff0c;從供應鏈優化到設備維護&#xff0c;AI的應用不僅提高了生產效率&#xff0c;還提升了產品質量和企業競爭力。本文將探討…

arc3.2語言sort的時候報錯:(sort < `(2 9 3 7 5 1)) 需要寫成這種:(sort > (pair (list 3 2)))

arc語言sort的時候報錯&#xff1a;(sort < (2 9 3 7 5 1)) arc> (sort < (2 9 3 7 5 1)) Error: "set-car!: expected argument of type <pair>; given: 9609216" arc> (sort < (2 9 3 )) Error: "Function call on inappropriate object…

Ubuntu 24.04 LTS Chrome 中文輸入法(搜狗等)失效?一行命令解決

Ubuntu 24.04 LTS Chrome 中文輸入法&#xff08;搜狗等&#xff09;失效&#xff1f;一行命令解決 在 Ubuntu 24.04 LTS 中&#xff0c;如果你發現 Chrome 瀏覽器用不了搜狗輸入法或其他 Fcitx5 中文輸入法&#xff0c;可以試試下面的方法。 直接上解決方案&#xff1a; 打…

大模型前處理-CPU

前處理包含哪些流程 分詞 tokenizationembedding CPU可以做哪些優化 分詞 分詞在做什么&#xff1f; 什么是詞元化&#xff1f; 詞元化&#xff08;Tokenization&#xff09;是把一段自然語言文本拆分成更小的單元&#xff08;稱為“詞元”&#xff0c;即 Token&#xff0…

Kafka數據怎么保障不丟失

在分布式消息系統中&#xff0c;數據不丟失是核心可靠性需求之一。Apache Kafka 通過生產者配置、副本機制、持久化策略、消費者偏移量管理等多層機制保障數據可靠性。以下從不同維度解析 Kafka 數據不丟失的核心策略&#xff0c;并附示意圖輔助理解。 一、生產者端&#xff1a…

圖像處理篇---face_recognition庫實現人臉檢測

以下是使用face_recognition庫實現人臉檢測的詳細步驟、實例代碼及解釋&#xff1a; 一、環境準備 1. 安裝依賴庫 pip install face_recognition opencv-python # 核心庫 pip install matplotlib # 用于顯示圖像&#xff08;可選&#xff09;2. 依賴說明 face_recognitio…

vb.net oledb-Access 數據庫本身不支持命名參數,賦值必須和參數順序一致才行

參數順序問題&#xff1a;OleDb 通常依賴參數添加的順序而非名稱,為什么順序要一樣? OleDbParameter 順序依賴性的原因 OleDb 數據提供程序依賴參數添加順序而非名稱&#xff0c;這是由 OLE DB 規范和 Access 數據庫的工作機制共同決定的。理解這個問題需要從數據庫底層通信…

Syslog 全面介紹及在 C 語言中的應用

Syslog 概述 Syslog 是一種工業標準的日志記錄協議&#xff0c;用于在網絡設備之間傳遞日志消息。它最早由 Eric Allman 在 1980 年代為 BSD Unix 開發&#xff0c;現在已成為系統和網絡管理的重要組成部分。Syslog 協議允許設備將事件消息發送到中央服務器&#xff08;稱為 sy…

HackMyVM-Art

信息搜集 主機發現 ┌──(kali?kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 03:00 EDT Nmap scan report for 192.168.43.1 Host is up (0.0047s latency). MAC Address: C6:45:66:05:91:88 (Unknown) Nmap scan rep…

[paddle]paddle2onnx無法轉換Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 訓練時序缺陷檢測后導出的模型無法轉換 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx&#xff1a;在端側設備上部署 Paddle2ONNX Version: 1.3.1 解…

DOCKER使用記錄

1、拉取鏡像 直接使用docker pull <image>&#xff0c;大概率會出現下面的報錯信息&#xff1a; (base) jetsonyahboom:~$ docker pull ubuntu:18.04 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while …

Java實習面試題

一、理想汽車一面 1、總結你這個人擅長什么&#xff0c;你的優勢是什么&#xff1f; 2、挑一個項目詳細講講&#xff0c;重點講下你怎么設計的&#xff0c;你的思路是什么&#xff0c;你做的過程中遇到什么難點&#xff0c;怎么克服這些難點&#xff1f; 3、使用RabbitMQ處理…

單元測試報錯

報錯信息如下所示&#xff1a; 五月 30, 2025 5:35:44 下午 org.junit.vintage.engine.descriptor.RunnerTestDescriptor warnAboutUnfilterableRunner 警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class redis.demo.RedisTemplateTest) does not…

00 QEMU源碼分析中文注釋與架構講解(v8.2.4版本)

QEMU-v8.2.4源碼中文注釋與架構講解 文檔會不定期更新 注釋作者將狼才鯨創建日期2025-05-30更新日期2025-06-02 CSDN閱讀地址&#xff1a;QEMU源碼中文注釋與架構講解Gitee源碼倉庫地址&#xff1a;才鯨嵌入式/qemu 一、前言 其它參考教程的網址&#xff1a; QEMU 源碼目錄…

線段樹刷題記錄

一篇講解很好的線段樹博客&#xff1a;數據結構--線段樹篇_數據結構線段樹-CSDN博客 一、區間查詢 無修改&#xff1a; &#xff08;一&#xff09;最值問題&#xff1a; 1.P1816 忠誠 - 洛谷 思路&#xff1a; 模板。 注意&#xff1a; 無。 代碼&#xff1a; #include …