RATIO 문제 질문드려요

  • wayway
    wayway
    #include <stdio.h>
    
    unsigned N, M;
    
    int main() {
        double rate;
        int c;
        unsigned low, high, idx;
        int ratio, temp;
    
        scanf("%d", &c);
        for(; c>0; c--) {
            scanf("%d %d", &N, &M);
            rate = (double)M/N*100;
            ratio = (unsigned)rate;
    
            //printf("%f, %d\n", rate, ratio);
    
            low=1;
            high=2000000000;
    
            while(1) {
                idx=(low+high)/2;       
                rate = (double)(M+idx)/(N+idx)*100;
                temp = (unsigned)rate;
    
                if(low >= high) break;
    
                if( temp >= ratio+1) {
                    high = idx;             
                }
                else {
                    low = idx+1;                
                }
    
            }
    
            if(temp == ratio+1) printf("%u\n", idx);
            else printf("-1\n");
    
            //printf("%f, %d, %d\n", rate, ratio+1, temp);
        }
        return 0;
    }
    

    오답,오답,노답...

    프로그램은 현재 승률이 10%일때 11%이상의 값을 만드는 idx들 중에서 최소값을 찾아내고, 그 idx가 정말로 11%를 만들어내는지 확인하여 결과를 출력합니다.

    특별히 신경써야 하는 부분이
    1승만 했는데도 2%이상이 올라가는 경우나, 이미 99%이상이여서 더이상 1%를 올릴 수 없는 경우라고 보는데요, 몇몇 테스트를 해본 결과 여기서 이게 문제는 아니라 보구요, 계산 과정중에 오버플로우가 발생하지 않도록 unsigned 로 계산을 했습니다.

    그런데 노답이 계속 뜨는데요, 뭘 놓쳤는지 보이지가 않아서 질문올립니다ㅠ


    10년 전
1개의 댓글이 있습니다.
  • wayway
    wayway

    ㅎㅎㅎㅎㅎ.. 문제를 잘못이해했네요. 무조건 승률1%를 올리는 것으로 생각했는데 1% 이상을 올리면 된다고 되어있군요.즉 1승만 햇는데도 승률이 10%가 올라도 되는거였네요ㅠ


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.