p1349.cpp

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

CPP
47
字号
#include <stdio.h>

const   int     PlayA [3] [3] = {1 , 1 , 2 , 0 , 0 , 1 , -1 , 0 , 0 };
const   int     PlayB [3] [3] = {0 , -1 , -1, 1 , 0 , 0 , 2 , 0 , -1};
const   double  W [3] = { 0.25 , 0.5 , 0.25 };

double  Awins [21] , Bwins [21] , Tie [21];
double  Opt [21] [61] [61];

main ()
{
        int     i , j , k;
        int     p1 , p2;
        for ( i = 0; i < 21; i ++ )
                for ( j = 0; j < 61; j ++ )
                        for ( k = 0; k < 61; k ++ )
                                Opt [i] [j] [k] = 0;

        for ( i = 0; i < 21; i ++ ) Awins [i] = Bwins [i] = Tie [i] = 0;

        Opt [0] [20] [20] = 1;

        for ( k = 0; k < 20; k ++ )
                for ( i = 0; i < 61; i ++ )
                        for ( j = 0; j < 61; j ++ ) if ( Opt [k] [i] [j] > 0 ) {
                                for ( p1 = 0; p1 < 3; p1 ++ )
                                        for ( p2 = 0; p2 < 3; p2 ++ )
                                                Opt [k + 1] [i + PlayA [p1] [p2]] [j + PlayB [p1] [p2]] += Opt [k] [i] [j] * W [p1] * W [p2];
                        }

        for ( k = 0; k < 21; k ++ ) {
                for ( i = 0; i < 61; i ++ )
                        for ( j = 0; j < i; j ++ )
                                Awins [k] += Opt [k] [i] [j];
                for ( i = 0; i < 61; i ++ )
                        for ( j = i + 1; j < 61; j ++ )
                                Bwins [k] += Opt [k] [i] [j];
                for ( i = 0; i < 61; i ++ )
                        Tie [k] += Opt [k] [i] [i];
        }

        printf ( "Round   A wins    B wins    Tie\n" );
        for ( i = 1; i < 21; i ++ ) {
                printf ( "%5d%10.4f%c%9.4f%c%9.4f%\n" , i , Awins [i] * 100 , '%' , Bwins [i] * 100 , '%' , Tie [i] * 100 );
        }
}
 

⌨️ 快捷键说明

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