a348. TOI 2020/10 潛力組:JSON

中等TOI 歷屆

時間限制 1000 ms ・ 記憶體限制 256 MB

題目描述

請依指定的存取運算式,從 JSON 資料中取出元素。此題使用的 JSON 類型如下:

  • 數值:32 位元有號整數。
  • 字串:以雙引號包住零個以上字元,不含跳脫字元。
  • 布林值:true 或 false。
  • 陣列:以方括號包住零個以上有序的值,各值可為任意上述或巢狀類型,值之間以逗號分隔。
  • 物件:以大括號包住無序的鍵值對。鍵是互不重複的字串;鍵和值以冒號分隔,各對以逗號分隔。

運算式以 obj 表示整份資料,用 obj[索引值] 存取陣列元素,或 obj[鍵值] 存取物件的值,並可接續存取巢狀元素。官方範例以 [0] 存取陣列第一項。

輸入格式

第一行為 JSON 字串 s,長度小於 65525。第二行為存取運算式 o,長度同樣小於 65525。

輸出格式

輸出運算式所存取的元素在原輸入 JSON 中對應的文字片段,保留原有表示方式與物件鍵的順序,不重新排序或正規化。字串輸出包含雙引號。若運算式只有 obj,輸出整份輸入 JSON。

原題分組限制

25 分:只有單層物件結構;25 分:最多三層結構;50 分:無額外限制。

範例 1

輸入:

{"skps1450":"GG"}
obj["skps1450"]

輸出:

"GG"

範例 2

輸入:

{"Kirito":[{"Busna":"OAO"},"startburst"]}
obj["Kirito"][0]

輸出:

{"Busna":"OAO"}

範例 3

輸入:

87
obj

輸出:

87

原題疑義與審核備註

官方參考解答直接輸出原字串中所選元素的子字串,詳解也以更新字串起訖位置處理查詢,因此輸出方式已依補充來源明確化。官方原題仍未明定無效存取運算式(例如不存在的鍵或越界索引)的處理方式;此處不自行補上保證或錯誤輸出。

來源

TOI 2020 年 10 月練習賽潛力組,依官方 PDF 整理。

官方原題:https://tpmso.k12ea.gov.tw/toi/wp-content/uploads/question/202010/JSON.pdf

官方參考解答:https://tpmso.k12ea.gov.tw/toi/wp-content/uploads/question/202010/JSON.zip

官方詳解投影片:https://tpmso.k12ea.gov.tw/toi/wp-content/uploads/question/202010/JSON.odp

標籤:TOI 歷屆

範例測資

範例輸入 1

{"skps1450":"GG"}
obj["skps1450"]

範例輸出 1

"GG"

範例輸入 2

{"Kirito":[{"Busna":"OAO"},"startburst"]}
obj["Kirito"][0]

範例輸出 2

{"Busna":"OAO"}

範例輸入 3

87
obj

範例輸出 3

87
請先登入後再提交程式碼

討論與題解

載入討論區…

更多