Sicily 1036. Crypto Columns
来源:互联网 发布:如何在淘宝卖充值卡 编辑:程序博客网 时间:2024/06/05 20:00
/*注意!把一维数组当成二维数组使用时,要严格注意num = x*colNum + y 注意!所谓的密码转换关系别搞反了 *//*Run Time: 0secsRun 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;}