SNAIL 문제 질문입니다

  • kun452
    kun452

    위의 방식과 아래의 방식에서의 차이점은 cout으로 쓴것과 printf로 쓴것밖에 없는데 위에는 정답으로 인정되고 아래는 오답으로 처리되는데 이유가 뭔지 알수 있을까요?

    #include<iostream>
    #include<iomanip>
    #include <cmath>
    using namespace std;
    long double nCr(long n, long r) {
        long double ret = 1;
        for (int i = 0; i < r; i++) {
            ret *= (n - i);
            ret /= (r - i);
        }
        return ret;
    }
    
    int main() {
        long n, m, T;
        long double ans, unit;
        cin >> T;
        cout << fixed << setprecision(10);
        while (T--) {
            cin >> n >> m;
            unit = 1;
            for (int j = 0; j < m; j++) {
                unit *= 0.25;
            }
    
            ans = 0.0;
    
            if(m >= n)
                cout << 1.0 << endl;
    
            //if(m > 2*n)
            //  printf("%.10lf\n", 0.0);
    
            else{
                for(int j=n-m; j<= m; j++){
                    long double a = 1;
                    for(int k=0; k<j; k++){
                        a *= 3;
                    }
    
                    ans += nCr(m, j) * unit * a;
                }
    
                cout << ans << endl;
            }
    
        }
    }
    
    #include<iostream>
    #include<iomanip>
    #include <cmath>
    using namespace std;
    long double nCr(long n, long r) {
        long double ret = 1;
        for (int i = 0; i < r; i++) {
            ret *= (n - i);
            ret /= (r - i);
        }
        return ret;
    }
    
    int main() {
        long n, m, T;
        long double ans, unit;
        cin >> T;
        while (T--) {
            cin >> n >> m;
            unit = 1;
            for (int j = 0; j < m; j++) {
                unit *= 0.25;
            }
    
            ans = 0.0;
    
            if(m >= n)
                printf("%.10lf\n", 1.0);
    
            //if(m > 2*n)
            //  printf("%.10lf\n", 0.0);
    
            else{
                for(int j=n-m; j<= m; j++){
                    long double a = 1;
                    for(int k=0; k<j; k++){
                        a *= 3;
                    }
    
                    ans += nCr(m, j) * unit * a;
                }
    
                printf("%.10lf\n", ans);
            }
    
        }
    }
    

    10년 전
2개의 댓글이 있습니다.
  • Being
    Being

    long double의 표준 출력 지정자는 %lf가 아니라 %Lf입니다.


    10년 전 link
  • kun452
    kun452

    아.. 감사합니다..


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