STARCRAFT 문제 질문드립니다.

  • cspark89
    cspark89
    #include<iostream>
    #include<stdio.h>
    
    using namespace std;
    
    long long factorial(int num)
    {
        long long data = 1;
    
        for(int i=2;i<=num;i++)
        {
            data = data * i;
        }
    
        return data;
    }
    
    long double make_prob(int percent, int win_cnt, int lose_cnt)
    {
        long double prob = 1;
    
        for(int i=0;i<=win_cnt;i++)
        {
            prob *= (double)percent / 100;
        }
    
        for(int i=0;i<lose_cnt;i++)
        {
            prob *= ((100 - (double)percent) / 100);
        }
    
        return prob;
    }
    
    int main(void)
    {
        int loop = 0;
        int case_cnt;
    
        int percent;
        int be_win;
    
        int win_cnt;
        int lose_cnt;
        int round_cnt;
    
        long double total_prob = 0;
        long double this_prob;
        long long this_case;
    
        long double result[1010];
    
        cin >> case_cnt;
    
        while(loop < case_cnt)
        {
            cin >> percent >> be_win;
    
            win_cnt = be_win - 1;
    
            for(int i=0;i<be_win-1;i++)
            {
                lose_cnt = i + 1;
                round_cnt = win_cnt + lose_cnt;
    
                this_case = factorial(round_cnt) / (factorial(win_cnt) * factorial(lose_cnt));
                this_prob = make_prob(percent, win_cnt, lose_cnt);
    
                total_prob = total_prob + ((long double)this_case * this_prob);
            }
            total_prob = total_prob + make_prob(percent, win_cnt, 0);
    
            result[loop] = total_prob;
    
            total_prob = 0;
            loop++;
        }
    
    
        for(int i=0;i<case_cnt;i++)
        {
            printf("%.0lf\n",result[i] * 100);
        }
    }
    

    디버그 1 ~ 10까지 다 해본 결과 직접 손으로 푼 것과

    정확히 일치하였는데, 답은 자꾸 오답이 나오네요

    실수형 계산하고 정수형계산하고 오며가며 하는 과정에서

    오답 처리가 되는 것인지 잘 모르겠네요


    12년 전
2개의 댓글이 있습니다.
  • kcm1700
    kcm1700

    printf 포맷이 이상한 것 같네요.
    long double은 %lf로 출력하는 것이 아니라 %Lf로 출력하셔야 해요.

    그리고 테스트케이스 다 저장해뒀다가 한번에 출력할 필요 없어요.


    12년 전 link
  • cspark89
    cspark89

    감사합니다 덕분에 해결했어요~


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