PKU 1617 Crypto Columns

  • ソート
  • 残りは書いてある通りに実装
int main() {
	string key;
	while (getline(cin, key) && key != "THEEND") {
		vector<pair<char, int> > p;
		for (int i = 0; i < key.size(); ++i) {
			p.push_back(make_pair(key[i], i));
		}
		stable_sort(p.begin(), p.end());

		string body;
		getline(cin, body);

		const int N = key.size();
		const int M = body.size() / N;
		vector<vector<char> > table(M, vector<char>(N));
		int index = 0;
		for (int n = 0; n < N; ++n) {
			for (int m = 0; m < M; ++m) {
				const int pp = p[n].second;
				table[m][pp] = body[index++];
			}
		}

		for (vector<vector<char> >::iterator it = table.begin(), itEnd = table.end(); it != itEnd; ++it) {
			cout << string(it->begin(), it->end());
		}
		cout << endl;
	}
}