PKU 1317 Do the Untwist (ZOJ 1006)

http://poj.org/problem?id=1317
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6
与えられた暗号化文字列を復号する。

int arr[100];

main(){
  string in;
  int k;
  while(cin>>k,k){
    cin>>in;
    rep(i,SZ(in)){
      arr[i]=i*k%SZ(in);
      if(in[i]=='.')in[i]=27;
      else if(in[i]=='_')in[i]=0;
      else in[i]-='a'-1;
    }
    string out;
    out.resize(SZ(in));
    rep(i,SZ(in)){
      out[arr[i]]=(in[i]+i)%28;
    }
    in=out;
    rep(i,SZ(in)){
      if(in[i]==0)cout<<'_';
      else if(in[i]==27)cout<<'.';
      else cout<<char(in[i]+'a'-1);
    }
    cout<<endl;
  }
}