#45182: 簡略解題報告 使用deque


010521@mail.pcsh.ntpc.edu.tw (twilight)

學校 : 新北市立板橋高級中學
編號 : 173875
來源 : [223.23.239.13]
最後登入時間 :
2025-01-22 13:41:28
q182. 2. 字串操作 -- 2025年1月APCS | From: [101.139.133.158] | 發表日期 : 2025-01-22 00:16

解題報告

 

問題描述

 

將輸入字串根據操作類型進行處理:

1. kk = 0:字元兩兩交換。

2. kk = 1:字元兩兩排序後放回。

3. kk = 2:字串分為兩半交替合併。

 

重複進行 k 次操作後,輸出最終字串。

 

解題思路

1. 資料結構:

使用 deque<char> 來存放字串,方便進行前後端的插入與移除操作。

2. 模擬操作:

• kk = 0:兩兩交換字元順序。

 

cp.push_back(ss[1]);

cp.push_back(ss[0]);

 

 

• kk = 1:兩兩排序後放入新字串。

 

pa.push_back(ss[0]);

pa.push_back(ss[1]);

sort(pa.begin(), pa.end());

 

 

• kk = 2:分成前半段和後半段交錯合併。

 

for (j = 0; j < ss.size() / 2; j++) sh.push_back(ss[j]);

 

 

3. 重複操作:

每次操作後更新字串,清空暫存結構。

4. 輸出結果:

將結果依序輸出。

 

範例說明

 

輸入:

 

abcdef  

3  

0 1 2  

 

輸出:

 

bacfed  

 

執行步驟:

1. kk = 0:abcdef -> bacfed

2. kk = 1:bacfed -> abcfde

3. kk = 2:abcfde -> afbdce

 

關鍵程式碼片段

 

if (kk == 0) {

    while (!ss.empty()) {

        cp.push_back(ss[1]);

        cp.push_back(ss[0]);

        ss.pop_front();

        ss.pop_front();

    }

}

 

上述片段實現兩兩交換。

 
ZeroJudge Forum