티스토리 뷰

공부/Problem Solving

SRM 523 DIV1 250

Mastojun 2011.11.13 13:06
250 - 결과 Chanllenged

아침에 일어나 확인해보니 챌당했다 ㅠㅠ.. 지금까지 div1은 항상 한가지 예외처리(..)를 하지 않아서 당했었는데 일단 다시 풀어보았다.

다시푼 코드

class CountingSeries
{
public:
    bool isDuplicated(long long n, long long a, long long b){
        if(a > n) return false;
        return (n-a)%b == 0;
    }
    long long countThem(long long a, long long b, long long c, long long d, long long upperBound)
    {
        long long result = 0;
        if(a <= upperBound){
            result = (upperBound-a)/b+1;
        }
        if(d == 1){if(c <= upperBound && isDuplicated(c, a, b) == false) result++;
        }else{
            while(c <= upperBound){
                if(isDuplicated(c, a, b) == false) result++;
                c *= d;
            }
        }
 
        return result;
    
}; 

System Test통과. 엇.?


제출했던 코드를 보니.. d가 1일경우 중복처리를 안했다 orz...

class CountingSeries 
{ 
public: 
    long long countThem(long long a, long long b, long long c, long long d, long long upperBound)
    { 
        long long maxX = upperBound < a ? 0 : (upperBound-a)/b+1; 
        long long maxY = 0; 
        long long ex = c; 
        if(d == 1) maxY = upperBound >= c ? 1 : 0; 
        else{ 
            while(ex <= upperBound) 
            { 
                if(ex < a || (ex-a)%b != 0){ 
                    printf("O : %lld\n", ex); 
                    maxY++; 
                }else{ 
                    printf("X : %lld\n", ex); 
                } 
                ex *= d; 
            } 
        } 
        return maxX+maxY; 
    } 
};

TAG
,
댓글
댓글쓰기 폼