1 solutions

  • 0
    @ 2025-7-25 10:23:59

    #include #include #include #include #include

    using namespace std;

    // 计算从明文字母到密文字母的偏移量(密钥) int getShift(char plain, char cipher) { return (cipher - plain + 26) % 26; }

    // 检查密钥是否有效 bool isValidKey(const string& T, const string& word, int key) { if (T.length() != word.length()) return false;

    for (int i = 0; i < T.length(); ++i) {
        char expected = (T[i] - 'a' + key) % 26 + 'a';
        if (word[i] != expected) {
            return false;
        }
    }
    return true;
    

    }

    int main() { string T, S; getline(cin, T); getline(cin, S);

    // 将密文按空格分割成单词
    vector<string> cipherWords;
    stringstream ss(S);
    string word;
    while (ss >> word) {
        cipherWords.push_back(word);
    }
    
    vector<int> possibleKeys;
    
    // 检查每个可能的密钥(1-25)
    for (int key = 1; key <= 25; ++key) {
        // 检查是否有任何密文单词与T在该密钥下匹配
        for (const string& cipherWord : cipherWords) {
            if (isValidKey(T, cipherWord, key)) {
                possibleKeys.push_back(key);
                break; // 找到一个匹配即可确认该密钥有效
            }
        }
    }
    
    // 输出结果
    if (possibleKeys.empty()) {
        cout << "Error" << endl;
    } else {
        sort(possibleKeys.begin(), possibleKeys.end());
        cout << possibleKeys.size() << endl;
        for (size_t i = 0; i < possibleKeys.size(); ++i) {
            if (i > 0) cout << " ";
            cout << possibleKeys[i];
        }
        cout << endl;
    }
    
    return 0;
    

    }

    Information

    ID
    2610
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    24
    Accepted
    1
    Uploaded By