#41962: 叫gpt寫解題報告是合法的嗎?


010521@mail.pcsh.ntpc.edu.tw (Terry practice c++)

學校 : 新北市立板橋高級中學
編號 : 173875
來源 : [101.136.253.159]
最後登入時間 :
2024-10-20 12:51:07
o078. 3. 缺字問題 -- 2024年6月APCS | From: [101.136.243.188] | 發表日期 : 2024-09-13 23:31

填充部分:

請填補缺失的部分,使程式能夠正確執行並解出問題。

cpp
複製程式碼

#include <bits/stdc++.h>
using namespace std;

set<string> exi_str;  // 存儲已存在的字串集合
string k, s, exist;
int l, i, j;
vector<char> word;  // 用來儲存當前的字母組合

void dfs() {
    // 當字串長度達到指定長度時,進行處理
    if (word.size() == l) {
        string word_str;
        
        // 將當前的字符組合轉為字串
        // 填補這裡的程式碼
        
        // 如果該字串不在已知集合中,丟出該字串
        if ( /* 判斷該字串是否存在於 exi_str 中 */ ) {
            throw word_str;
        }
        
        return;  // 若已檢查完畢,結束遞迴
    }
    
    // 遍歷字串 k,嘗試添加下一個字符
    for (char c : k) {
        // 填補將字母加入當前組合的程式碼
        
        // 呼叫遞迴繼續產生下個字符
        dfs();
        
        // 移除當前字母,回到上一層
        // 填補將字母移除的程式碼
    }
}

int main() {
    getline(cin, k);  // 讀取所有可用字符
    cin >> l;         // 讀取目標字串長度
    cin.ignore();     // 忽略換行符
    getline(cin, s);  // 讀取已存在的字串集合
    
    // 將字串 s 切分成長度為 l 的子字串,並加入 exi_str
    for(i = 0; i+l-1 < s.size(); i++){
        for(j = 0; j < l; j++){
            // 填補將子字串構造並加入 exi_str 的程式碼
        }
        // 清空臨時變數,準備處理下一個子字串
        exist = "";
    }
    
    // 呼叫 DFS 開始搜索並找出不在已知集合中的字串
    try {
        dfs();
    } catch (string ans) {
        cout << ans << endl;  // 輸出第一個符合條件的字串
    }
}

提示:

  1. 你需要填補的部分主要包括:

    • 如何將字符組合轉成字串。
    • 如何檢查該字串是否已存在於 exi_str 中。
    • 如何在 DFS 中處理加入和移除字符的操作。
    • 如何從字串 s 中提取長度為 l 的子字串。
  2. dfs() 函數是遞迴的核心,你需要理解如何利用遞迴進行全排列的探索,並檢查哪些組合符合條件。

 
ZeroJudge Forum