不認真看題後果很嚴重....暴力模擬...效率很低的說...
// source code of submission 985877, Zhongshan University Online Judge System
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <string>
#include <memory.h>
using namespace std;
bool wordPosComp(const pair<char, int>& left, const pair<char, int>& right)
{
return left.first < right.first;
}
int main()
{
string keyword;
string ciphertext;
char textArray[200][200];
char resultArray[200][200];
int rowNum = 0;
while (true)
{
memset(textArray, '\0', sizeof(textArray));
memset(resultArray, '\0', sizeof(resultArray));
rowNum = 0;
cin >> keyword;
if (keyword == "THEEND")
break;
vector<pair<char, int> > wordPos; // word, original position
for (size_t i = 0; i < keyword.length(); i++)
{
wordPos.push_back(make_pair(keyword[i], i)); // pos is zero base
}
cin >> ciphertext;
rowNum = ciphertext.length() / keyword.size();
int iterCount = 0;
for (size_t col = 0; col < keyword.size(); col++)
{
for (int row = 0; row < rowNum; row++)
{
textArray[row][col] = ciphertext[iterCount];
iterCount++;
}
}
stable_sort(wordPos.begin(), wordPos.end(), wordPosComp);
int colCount = 0;
for (vector<pair<char, int> >::iterator iter = wordPos.begin(); iter != wordPos.end(); iter++)
{
int colNum = (*iter).second;
for (int row = 0; row < rowNum; row++)
{
resultArray[row][colNum] = textArray[row][colCount];
}
colCount++;
}
string result = "";
for (int i = 0; i < rowNum; i++)
{
for (size_t j = 0; j < keyword.size(); j++)
{
result.push_back(resultArray[i][j]);
}
}
cout << result << endl;
}
return 0;
}