LOTT - Xổ số

Tác giả: RR

Ngôn ngữ: C++

#include <iostream>
#include <algorithm>
#include <iomanip>
#define FOR(i,a,b) for(int i=a; i<=b; i++)
using namespace std;

int debug=0;
char s[20];
int n;
long double c[6][6],a[511][6],f[111][6],gt[555];

void init() {
    FOR(i,0,5) {
        c[i][0]=1;
        FOR(j,1,i)
            c[i][j]=c[i-1][j-1]+c[i-1][j];
    }
    
    FOR(i,1,500) {
        a[i][0]=1.0;
        FOR(j,1,min(i,5))
            a[i][j]=a[i][j-1]*(i-j+1);
    }
    
    gt[0]=1;
    FOR(i,1,500) gt[i]=gt[i-1]*i;    
}

int main() {
    scanf("%s\n",&s);
    init();
    while (s[1]=='C') {
        scanf("%d",&n);
        f[0][0]=1.0;
        FOR(i,1,n)
        FOR(k,0,5) {
            f[i][k]=0;
            FOR(kk,max(k-2,0),k) {
                f[i][k]+=f[i-1][kk]*c[5-kk][k-kk]*a[5][k-kk]*a[5*n-5-(5*(i-1)-kk)][5-k+kk];
            }
        }        
        cout<<setprecision(15)<<(gt[5*n]-f[n][5])/gt[5*n]<<endl;
        scanf("%s\n",&s);
    }
    return 0;
}

Download