首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

ZOJ 3826 Hierarchical Notation:EON 文本解析與查詢模擬 (哈希 + 樹構建 + 子串輸出)

     編輯:C++ 入門

問題

解析類 JSON 的 EON 格式:
{"key":"value", "key2":{"nested":"obj"}}
支持巢狀查詢:"key"、"key2"."nested"。輸出對應值 (含大括號的完整子串),不存在輸出 Error!。冒號數 ≤ 10000,查詢 ≤ 1000。

解析策略:單次掃描建樹 + 記錄值起始位置

  1. 用棧維護當前層級 (對象 ID)。
  2. 遇到 " 讀取鍵名,哈希得 ID,記錄父子關係 graph[parent][child]=true。
  3. 若值為對象 (: 後跟 {):子對象入棧。
    若值為字符串:記錄該值在原串中的**起始索引** stpt[child] (含引號)。
  4. 遇到 } 出棧。

查詢處理

  1. 按 . 分割查詢鍵,依次在樹中遍歷:p = graph[p][hash(key)]。若中斷 → Error!。
  2. 到達目標節點 p,從 stpt[p] 開始輸出原串:
    若值為對象 (首字符 {):匹配大括號平衡輸出至對應 }。
    若為字符串:輸出至下一個未轉義引號。

關鍵代碼片段

// 解析主循環
for (int i=0;i

哈希函數

簡單多項式滾動哈希 ret = ret*123 + (c-'0'),鍵長 ≤ 20,衝突概率極低。亦可用 unordered_map。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved