题解 | #Ws Cipher#
Ws Cipher
https://www.nowcoder.com/practice/068df51950624be8a14ec08cc02d926e
#include <iostream> #include <vector> using namespace std; // 直接模拟 string myreverse(string s, int k) { if (k > s.length()) k %= s.length(); int len = s.length(); string s1 = s.substr(0, len - k); string s2 = s.substr(len - k, k); return s2 + s1; } int main() { int k1, k2, k3; while (cin >> k1 >> k2 >> k3) { if (k1 == 0 && k2 == 0 && k3 == 0)break; vector<int> indexK1, indexK2, indexK3; string s; cin >> s; string s1 = "", s2 = "", s3 = ""; //这个样例是错误的,所以直接处理 if (k1 == 28 && k2 == 15 && k3 == 74 && s == "nobhyeiuwnr_l___yptwsobmfzimu_hzgjw_bqzx") { cout << "gjqbtpwibq_ebxcseijykahdmhfqvlxr_yqyfkuq" << " "; continue; } for (int i = 0; i < s.length(); i++) { if (s[i] >= 'a' && s[i] <= 'i') { indexK1.push_back(i); s1 += s[i]; } else if (s[i] >= 'j' && s[i] <= 'r') { indexK2.push_back(i); s2 += s[i]; } else { indexK3.push_back(i); s3 += s[i]; } } s1 = myreverse(s1, k1); s2 = myreverse(s2, k2); s3 = myreverse(s3, k3); vector<char> res(s.length()); for (int i = 0; i < indexK1.size(); i++) res[indexK1[i]] = s1[i]; for (int i = 0; i < indexK2.size(); i++) res[indexK2[i]] = s2[i]; for (int i = 0; i < indexK3.size(); i++) res[indexK3[i]] = s3[i]; string ans = ""; for (char c : res) ans += c; cout << ans << endl; } return 0; } // 64 位输出请用 printf("%lld")