RATIO 문제 질문이요!

  • skyoo2003
    skyoo2003

    승률이 1% 오르는 것을 확인하려면 증가시켜가면서 비율 계산을 하는 것은 맞는 거죠?
    계속 시간초과가 떠서 숫자의 크기 단위마다 N, M을 증가하ㅡㄴ 단위를 크게 했는데도 시간초과가 뜹니다...
    오류 지적좀 부탁드립니다. 아래는 소스코드고 힌트 부탁드려요 ㅠㅠ

    #include <iostream>
    
    using namespace std;
    
    int main() {
        const unsigned long long MAX_M = 2000000000;
        unsigned long long T, t, N, M, orgN, orgM, incr;
        double Z1, Z2;
        cin >> T;
        for(t = 0; t < T; ++t) {
            cin >> N >> M;
            if(N == M) cout << "-1" << endl;
            else {
                Z1 = ((double) M) / N;
                orgN = N; orgM = M;
                incr = orgN / 10;
                for(incr = orgN / 10; incr > 1; incr /= 10) {
                    while(((double) M) / N - Z1 < 0.01) {
                        M += incr; N += incr;
                        if(M - orgM > MAX_M) {
                            break;
                        }
                    }
                    if(M - orgM > MAX_M) break;
                    M -= incr; N -= incr;
                }
    
                if(M - orgM > MAX_M) cout << "-1" << endl;
                else {
                    do {
                        Z2 = ((double) ++M) / ++N;
                    } while(Z2 - Z1 < 0.01);
    
                    cout << (N - orgN) << endl;
                }
    
            }
        }
    
        return 0;
    }
    

    11년 전
8개의 댓글이 있습니다.
  • VOCList
    VOCList

    작성하신 코드는 생각하신 풀이법에서 크게 벗어나지 않는 코드인 것 같습니다. 이보다 더 빠른 풀이 방법이 존재하는 문제인 것 같아요.


    11년 전 link
  • skyoo2003
    skyoo2003

    더... 더빨리요?;;; 하앍... 좀 더 해봐야겠네요 ㅠㅠ


    11년 전 link
  • JongMan
    JongMan

    소스코드는 글 쓸때 밑에 있는 가이드를 참조하셔서 작성하시면 문법 강조가 이쁘게 됩니다.


    11년 전 link
  • skyoo2003
    skyoo2003

    오 좋네요ㅎㅎ 지금막 수정했습니다.


    11년 전 link
  • sven
    sven

    RATIO


    11년 전 link
  • sven
    sven

    수학적으로 접근해보세요!
    식 하나로 표현 가능합니다.


    11년 전 link
  • zzapcoder
    zzapcoder

    되고, 안 되고... :)


    11년 전 link
  • skyoo2003
    skyoo2003

    @sven 감사합니다. 식 하나로 표현 가능하다는 힌트에 해답 얻을 것 같습니다 ㅎㅎ 한번 해볼게요ㅋㅋㅋ


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