Hatena::Grouptopcoder

cafelier@SRM

cafelier のSRM参加記録です。コンテスト中に考えてたことを執拗に全部書き残すとどうなるだろうかという試み本番中にこういうコードが書きたかったなあ、という後で書いた反省コードを書き残す試み

スパムが来たのでしばらくコメント欄をはてなユーザ限定にしています、すみません、

 | 

2012-02-04

SRM 530 Div2 250

| 15:29 | はてなブックマーク -  SRM 530 Div2 250 - cafelier@SRM

問題

main(
   T : int<0..10>[2..10],
   strict_sorted(T)
) {
   let pT = all_permutations(T)
   let spT = map(pT, move(T,_1))
   max(spT)
}

move(T, S) {
   sigma(zip(T, S, abs(_1 - _2))) / 2
}

解答例

int solve(vector <int> T)
{
   int maxMove = 0;

   vector<int> S = T;
   sort(S.begin(), S.end());
   do {
      int dif = 0;
      for(int i=0; i<S.size(); ++i)
         dif += abs(S[i]-T[i]);
      maxMove = max(maxMove, dif/2);
   } while( next_permutation(S.begin(), S.end()) );
 
   return maxMove;
}

微妙。sigma(zip(T, S, abs(_1 - _2))) / 2 が問題文の仕様に合っているというのは何一つ自明ではない。といって問題の仕様どうやって記述しきればいいのかな…。

reverse(S.begin(), S.end());
int dif = 0;
for(int i=0; i<S.size(); ++i)
    dif += abs(S[i]-T[i]);
return dif/2;

この解はとりあえず導けなくていいや。

トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/cafelier/20120204
 | 

presented by cafelier/k.inaba under CC0