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;}

原创粉丝点击