/*
注意!把一维数组当成二维数组使用时,要严格注意num = x*colNum + y
注意!所谓的密码转换关系别搞反了
*/
/*
Run Time: 0secs
Run Memory: 312KB
*/
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
string key;
string text;
int rowNum; //key的长度
int colNum; //text长度除以key长度
typedef struct Pair{
char word;
int place;
};
vector<Pair> pairs;
int cmp(Pair a, Pair b){
return a.word < b.word;
}
inline char getText(int x, int y){
return text[x * colNum + y];
}
int main()
{
while (cin>>key && key!="THEEND"){
cin >> text;
if(pairs.size() != 0)
pairs.clear();
rowNum = key.length();
colNum = text.length() / key.length();
for(int i=0; i<key.length(); i++){
Pair buf;
buf.word = key[i];
buf.place = i;
pairs.push_back(buf);
}
sort(pairs.begin(), pairs.end(), cmp);
char results[rowNum][colNum];
for(int i=0; i<key.length(); i++){ //按照key的排序将每一行重新排好
int row = pairs[i].place;
for(int j=0; j<colNum; j++){
int col = j;
char bufChar = getText(i, j);
results[row][col] = bufChar; //注意这里的顺序关系,别弄反了
}
}
for(int j=0; j<colNum; j++){
for(int i=0; i<rowNum; i++){
cout << results[i][j];
}
}
cout << endl;
}
return 0;
}
Sicily 1036. Crypto Columns
最新推荐文章于 2017-05-30 04:38:39 发布