GoForIt回答 - 暗号検索の高速化 -
sonyが開催しているGo For Itに参加しています。言語はKonohaScriptKonoha Projectを使用しています。
TopCoderなどのように実行環境を限定されていないコンテストなため、こういう時はKonohaScriptを使ってみます。
回答はshidasan · GitHubで公開している他、こちらのアカウントでKonohaScriptの開発も行っています。
KonohaScriptのインストールは、KonohaScript インストール手順(1)ソースからのビルド - Konoha日誌で詳しく解説されています。
i)
skip数と先頭文字列の位置で単純にイテレートしました。KonohaScriptは静的な型付けによるプログラムの高速な実行を特徴とするスクリプト言語ですが、C言語やJavaのようなコンパイル言語と比較すると実行速度は劣ります。
工夫の無いプログラムだった事もあり、回答は出そうにありませんでした。
ii)
まず2次元配列dataに、キーワードのi番目に当てはまるランダム文字列の位置を配列として記憶します。
for (int i = 0; i < |data|; i++) { for (int j = 0; j < STR_MAX; j++) { if (rand_str[j] == keyword[i]) { data[i].add(j); } } }
data[0]の配列とdata[1]の配列に格納されている数値からスキップ数を求める事で、比較的高速な実行が行えました。42秒程度です。