简单模拟

#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; #define max_key_len 15 #define max_len 105 struct Elem { char ch; int index; }letter[max_key_len]; char key[max_key_len]; int key_len; char st[max_len]; int map[max_key_len]; bool operator < (const Elem &a, const Elem &b) { if (a.ch == b.ch) return a.index < b.index; return a.ch < b.ch; } void work() { key_len = strlen(key); for (int i = 0; i < key_len; i++) { letter[i].ch = key[i]; letter[i].index = i; } } void output() { for (int i = 0; i < key_len; i++) map[letter[i].index] = i; int row = strlen(st) / key_len; for (int i = 0; i < row; i++) { for (int j = 0; j < key_len; j++) putchar(st[i + map[j] * row]); } putchar('\n'); } int main() { //freopen("t.txt", "r", stdin); while (gets(key), strcmp(key, "THEEND") != 0) { gets(st); work(); sort(letter, letter + key_len); output(); } return 0; }