Hatena::Grouptopcoder

TopCoderの問題を解く

解いた問題の一覧表

2009-09-27

SoldierLabeling

| 11:03

問題文, SRM 446

lowerBound から upperBound の間の桁数の数がラベルされている軍人だけを数えるき、数えるであろう兵隊の数を返せ。

この問題は以前にも解いた問題で、その時は187.99点だった。今回はというと、少し手間取ったが、前回よりは高い点を獲得できた。

200.03/250

class SoldierLabeling {
public:
    int count(int n, int lowerBound, int upperBound) {
        int count = n;
        int lower = (int)pow(10.0, lowerBound-1) - 1;
        int upper = (int)pow(10.0, upperBound) - 1;
        count -= lower;
        if (count < 0) return 0;
        if (upper <= n) count -= n - upper;
        return count;
    }
};