時間限制 1000 ms ・ 記憶體限制 256 MB
題目描述
場上從左至右排列 N 個數字,依序執行 M 次行動。行動分為三種:
- action1(l, r):取得第 l 至第 r 個數字的總和,作為本次獲得的積分。
- action2(l, r):將第 l 至第 r 個數字各自的最後一位數拿掉。依官方參考程式,此操作是把各數除以 10,捨去小數部分並向 0 截斷;因此負數保留商的符號,絕對值小於 10 的數以及 0 都會變成 0。
- action3(l, x):將第 l 個數字改成 x。
請依照行動順序更新場上的數字,並輸出每一次 action1 當次獲得的積分,不需要輸出玩家的累計分數。
輸入格式
第一行為整數 N、M,1 ≤ N, M ≤ 5×10^5。
第二行為 N 個數字,表示初始排列。
接著 M 行,每行三個整數 T、a、b,1 ≤ T ≤ 3,表示執行 actionT(a, b)。
- T = 1 或 2 時,1 ≤ a ≤ b ≤ N。
- T = 3 時,1 ≤ a ≤ N,b 為要設定的數字。
- 所有輸入數字都在 32 位元有號整數範圍內。
原題分組限制:10 分:N, M ≤ 10^3。20 分:T = 1。40 分:T ≠ 2。30 分:無額外限制。
輸出格式
每遇到 T = 1 的行動,輸出一行整數,表示這一次行動取得的積分。
範例 1
輸入:
6 4
32 41 102 888 99 65
1 3 5
2 2 4
3 4 1024
1 1 6
輸出:
1089
1234
官方補充來源說明
原題 PDF 沒有明寫負數、單位數與 0 移除末位的規則。官方參考程式 Numbers.cpp 的 RangeUpdate 使用有號整數除以 10,官方詳解第 14 頁亦呈現同一段程式;第 11 頁說明任意 32 位元有號整數經過 10 次此操作會變成 0。本稿據此補足向 0 截斷的規則,不另外限制初值或更新值必須非負。
來源
TOI 2022 年 12 月歷屆題〈數字遊戲〉,依官方 PDF 重新整理。
官方原題:https://tpmso.k12ea.gov.tw/toi/wp-content/uploads/question/202212/Numbers.pdf
標籤:TOI 歷屆
官方參考程式:https://tpmso.k12ea.gov.tw/toi/wp-content/uploads/question/202212/Numbers.zip
官方詳解:https://tpmso.k12ea.gov.tw/toi/wp-content/uploads/question/202212/Numbers.odp
範例測資
範例輸入 1
6 4 32 41 102 888 99 65 1 3 5 2 2 4 3 4 1024 1 1 6
範例輸出 1
1089 1234
討論與題解
載入討論區…