//题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2039
这道题主要用了简单的预处理,根据题意对src的奇数行的存储内容进行逆转,然后计算出src中每列的开始元素在des中的开始下标,最后直接扫描映射就可以了。这道题的收获还是不小的!
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int i,col,row,len,c,start[100];
string src,des;
while(cin >> col && col != 0)
{
cin >> src;
des = src;
len = src.size();
row = len / col;
for(i = 0;i < col;++i)
start[i] = i * row;
for(i = 0;i < row;++i)
{
if(i % 2 != 0)
reverse(src.begin() + i*col,src.begin() + i*col + col);
}
for(i = 0;i < len;++i)
{
c = i % col;
des[start[c]] = src[i];
++start[c];
}
cout << des << endl;
}
return 0;
}