読者です 読者をやめる 読者になる 読者になる

PKU 1026(途中)

またもやTime Limit Exceeded

#include <cstdio>

using namespace std;

int main(){
	char *src, *dst;
	int i, j, k, *key, keylen;

	scanf("%u\n", &keylen);
	key = new int[keylen];

	for(i = 0; i < keylen; i++){
		scanf("%u[ \n]", &key[i]);
		key[i]--;
	}

	src = new char[keylen + 1];
	dst = new char[keylen + 1];

	while(1){
		scanf("%u ", &k);
		if(k == 0) break;

		for(i = 0; i < keylen + 1; i++){
			src[i] = ' ';
			dst[i] = 0;
		}

		gets(src);

		for(i = 0; i < keylen; i++)
			if(!src[i]){ src[i] = ' '; break; }

		for(j = 0; j < k; j++){
			for(i = 0; i < keylen; i++){
				dst[key[i]] = src[i];
			}
			
			for(i = 0; i < keylen + 1; i++)
				src[i] = dst[i];
		}
		puts(dst);
	}
	return 0;
}

結構全面的に書きなおしたのに。ってかこれじゃほぼCじゃん。一応ボトルネックになりそうな箇所は全部なおしたつもりなんだけどなあ…

言語Cにかえてみるっていうインチキも駄目。どうすればいいんだろう…
あとはscanf使いすぎとかぐらいしか思い当たらない。あるいは毎回キーの長さ分だけスワップするんじゃ駄目とか?
それ意外のforは減らせる気がしない。