PKU 1026(途中)

Time Limit Exceededされたコード。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main(){
	vector<int> key;
	int i, j, keylen, tmp;

	cin>>keylen;

	for(i = 0; i < keylen; i++){
		cin>>tmp;
		tmp--;
		key.push_back(tmp);
	}

	while(1){
		tmp = 0;
		vector<char> src(keylen + 1, ' '), dst(keylen + 1, 0);
		cin>>tmp;
		if(tmp == 0) break;
		cin.ignore();
		cin.getline(&src[0], src.size());
		for(i = 0; i < keylen; i++)
			if(!src[i]) src[i] = ' ';

		for(j = 0; j < tmp; j++){
			for(i = 0; i < key.size(); i++){
				dst[key[i]] = src[i];
			}

			src = dst;
		}
		cout<<string(&dst[0])<<endl;

	}
	cin>>tmp;
	return 0;
}


そもそも最初keyから1引くの忘れて、あれー配列の添字あわないなーとかいうので小一時間悩んだりとかして、自分の技量の無さを実感中…
その点ではPKUとかは本当にいい訓練にはなってると思うけど。