SRM446 DIV2

500点問題が割と簡単だったので、初めて1000点問題を開けられた記念すべきSRM
とか言ってるけど1000点問題は開けただけだし、肝心の500点問題はSystemTestで落ちたけど・・・
でもrateが若干増えたのでこの勢いに乗っていきたいところ。

250

与えられた最小の桁数と最大の桁数の間にある値の数を数えろっていう問題。
あまり難しい問題ではなかったけど、テストを入念にやって時間を食ってしまった。
正確なコードを短時間で書けるような練習もしないといけないなあ。
170点ちょい取れた。

#include <iostream>

using namespace std;

class SoldierLabeling
{
  public:
  int count(int n, int lowerBound, int upperBound)
  {
    int i;
    int ans = 0;
    int lb = 1;
    double ub = 9.9999999;
    
    for(i = 1; i < lowerBound ; i++) lb *= 10;
    for(i = 1; i < upperBound ; i++) ub *= 10;
    
    for(int i = 0; i <= n; i++)
      if(i >= lb && i <= ub) ans++;
    
    return ans;
  }
};

なんかiを2回宣言してたりして結構慌ててたのが分かる。
powを使ってなかったりで、あまり綺麗な解き方ではないかもしれないと他の方のを見て思った。

500

キューブの上を動くロボットが最後に居る地点はどこでしょうっていう問題。
どの面も同じ配色だから、端から出たら逆の端から出てくるようにすれば、わざわざキューブで考えなくてもよさそう。
ってことでコーディングして、用意されたテストも一通り通ったのでSubmit。
1000点問題開けて解けなさそうだったから、見直ししてたら色々おかしいことが判明。
急遽直して提出しようと思ったら時間切れ。撃墜されなかっただけ運がよかった・・・

1000

問題文ちらっと見て早々に諦めた。
残り5分じゃどう考えても無理でしょう。
順番に解いて開けられただけでも進歩と思うことにする。