Hatena::Grouptopcoder

cafelier@SRM

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

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

 | 

2011-12-24

SRM526.5 250

| 13:56 | はてなブックマーク -  SRM526.5 250 - cafelier@SRM

  • 同じ部屋のxiaowuc1さんの解がかっこよかった
class MagicCandy { public:
   int whichOne(int n)
   {
      // r が最後まで生き残るかどうか…?
      int r = n;
      while( n > 1 ) {
         const int sn = int(sqrt(n));
         // sn*sn == n だったら平方数になってるので死んでる
         // r-1 は生きてるはずなので引き続きそれの生き残りチェック
         r -= (sn*sn == n);
         n -= sn;
      }
      return r;
   }
};
  • n = k*k+1 の形だったら2歩で k*k+1-k = (k-1)*(k-1)+k → (k-1)*(k-1)+1
  • と進むので、一度平方数+1になったら最後まで死なないので、rがそこまで生きてたらr-1も生きてる
  • ほげー

HiHi2011/12/24 14:24同じ解答だった。

cafeliercafelier2011/12/24 20:11cool.

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

presented by cafelier/k.inaba under CC0