2 solutions

  • 1
    @ 2025-8-28 18:14:20

    #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 cipherWords; stringstream ss(S); string word; while (ss >> word) { cipherWords.push_back(word); }

    vector 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