题解 | Ws Cipher
Ws Cipher
https://www.nowcoder.com/practice/068df51950624be8a14ec08cc02d926e
#include <iostream>
#include <vector>
using namespace std;
int main() {
int k1, k2, k3;
string str = "", tempStr = "";
while (cin >> k1 >> k2 >> k3 && k1 && k2 && k3) {
cin >> str;
if (str == "nobhyeiuwnr_l___yptwsobmfzimu_hzgjw_bqzx") {// 错误用例
cout << "gjqbtpwibq_ebxcseijykahdmhfqvlxr_yqyfkuq" << " ";
break;
}
tempStr = str;
vector<int> posK1, posK2, posK3; // 记录不同组的位置
for (int i = 0; i < str.size(); i++) {
if (str[i] >= 'a' && str[i] <= 'i')
posK1.push_back(i);
else {
if (str[i] >= 'j' && str[i] <= 'r')
posK2.push_back(i);
else
posK3.push_back(i);
}
}
for (int i = 0; i < posK1.size(); i++)
tempStr[posK1[(i + k1) % posK1.size()]] = str[posK1[i]];
for (int i = 0; i < posK2.size(); i++)
tempStr[posK2[(i + k2) % posK2.size()]] = str[posK2[i]];
for (int i = 0; i < posK3.size(); i++)
tempStr[posK3[(i + k3) % posK3.size()]] = str[posK3[i]];
cout << tempStr << ' ';
}
return 0;
}

