p1363.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 37 行

CPP
37
字号
#include <stdio.h>
#include <math.h>

int     C , N , M;
float   Opt [2] [102];

float   Ans ()
{
        if ( ( N - M ) % 2 == 1 || M > C ) return 0;

        int     a = 0 , b = 1 , k , i , change;
        float   t;

        for ( i = 1; i <= C + 1; i ++ ) { Opt [a] [i] = Opt [b] [i] = 0; }
        Opt [a] [0] = 1; Opt [b] [C + 1] = Opt [b] [0] = Opt [b] [C + 1] = 0;

        for ( k = 0; k < N; k ++ , a = 1 - a , b = 1 - b ) {  change = 0;
                Opt [b] [0] = Opt [a] [1] / C;
                for ( i = 1; i <= C; i ++ ) {
                        t = ( ( C - i + 1 ) * Opt [a] [i - 1] + ( i + 1 ) * Opt [a] [i + 1] ) / C;
                        if ( fabs ( t - Opt [b] [i] ) > 0.00005 ) change = 1;
                        Opt [b] [i] = t;
                }
                if ( k % 2 == M % 2 && !change ) break;
        }
        
        return Opt [a] [M];
}

main ()
{
        while ( scanf ( "%d" , &C ) , C ) {
                scanf ( "%d%d" , &N , &M );
                printf ( "%.3f\n" , Ans () ); 
        }
}
 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?