Submission #102508


Source Code Expand

#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#include<cassert>
#include<cstdlib>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<complex>

using namespace std;
typedef long long LL;
//typedef double LDouble;
typedef long double LDouble;
//typedef __float128 LDouble;
//typedef long long double LDouble;

//typedef complex<LDouble> Complex;


const double INF = 1e12;

typedef vector<LDouble> Poly;

// a*b where x^n = c
Poly mulPoly(const Poly&a, const Poly&b, const Poly&c) {
    int n=a.size();
    Poly r(n*2);
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            r[i+j] = (r[i+j]+a[i]*b[j]);
        }
    }
    for (int i=n*2; i-->n; ) {
        for (int j=1; j<=n; j++) {
            r[i-j] = (r[i-j]+r[i]*c[n-j]);
        }
    }
    r.resize(n);
    //for (int i=0; i<n; i++) assert(abs((double)r[i]) < INF);
    return r;
}

Poly powPoly(Poly a, LL y, const Poly&c) {
    int n = a.size();
    Poly r(n);
    r[0]=1;
    for (;y; y>>=1) {
        if (y&1) r = mulPoly(r, a, c);
        a = mulPoly(a, a, c);
    }
    return r;
}


int main() {
    //printf("double %d\n__float128 %d\nlong double %d\n", sizeof(double), sizeof(__float128), sizeof(long double));
    double _p, _q, _r;
    LDouble p, q, r;
    LL N, K, M;
    cin >> _p >> _q >> _r;
    cin >> N >> K >> M;
    p=_p; q=_q; r=_r;

    vector<LDouble> v(N*K+1);
    LDouble base = p+q+r;
    v[0] += -r / base;
    v[1] += r / base;
    v[N*(K-1)] += -p /base;
    v[N*(K-1) + 1] += p / base;
    v[N*K-1] += -q / base;
    v[N*K] += (p+2*q+r) / base;


    vector<LDouble>alpha(N*K+1);
    for (int i=1; i<=N*K; i++) {
        alpha[i] = (i>=N ? p*alpha[i-N] : 0) 
            + (i>=1 ? q*alpha[i-1] : 0)
            + (i>=N*K ? r*alpha[i-N*K] : 0)
            + 1;
        alpha[i] /= base;
    }

    //for (int i=0; i<N*K+1; i++) { printf("%d %f\n", i, double(alpha[i])); } puts("");
    Poly beta(N*K+1);
    beta[1]=1;
    beta = powPoly(beta, M*N, v);
    //for (int i=0; i<N*K+1; i++) { printf("%d %f\n", i, double(beta[i])); } puts("");

    LDouble ans=0;
    for (int i=0; i<N*K+1; i++) ans += beta[i] * alpha[i];

    printf("%.9f\n", double(ans));
    //cout << ans << endl;

    return 0;
}

Submission Info

Submission Time
Task B - Cans of Toys
User YellowYell
Language C++ (GCC 4.4.7)
Score 0
Code Size 2339 Byte
Status WA
Exec Time 1104 ms
Memory 1092 KB

Judge Result

Set Name all
Score / Max Score 0 / 100
Status
AC × 31
WA × 18
Set Name Test Cases
all 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 4, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 5, 6, 7, 8, 9
Case Name Status Exec Time Memory
1 AC 185 ms 800 KB
10 AC 21 ms 836 KB
11 AC 22 ms 928 KB
12 AC 21 ms 916 KB
13 AC 174 ms 1036 KB
14 AC 53 ms 980 KB
15 AC 23 ms 848 KB
16 AC 35 ms 948 KB
17 AC 131 ms 1000 KB
18 WA 794 ms 1052 KB
19 WA 60 ms 948 KB
2 AC 24 ms 920 KB
20 WA 33 ms 924 KB
21 WA 35 ms 940 KB
22 WA 81 ms 856 KB
23 WA 26 ms 888 KB
24 AC 22 ms 924 KB
25 AC 21 ms 924 KB
26 AC 22 ms 928 KB
27 AC 207 ms 1052 KB
28 AC 25 ms 888 KB
29 AC 23 ms 776 KB
3 AC 24 ms 912 KB
30 AC 24 ms 888 KB
31 AC 208 ms 1012 KB
32 AC 22 ms 836 KB
33 WA 26 ms 928 KB
34 WA 31 ms 928 KB
35 WA 1103 ms 1088 KB
36 AC 25 ms 928 KB
37 WA 22 ms 920 KB
38 WA 23 ms 808 KB
39 WA 1104 ms 1092 KB
4 AC 21 ms 920 KB
40 AC 446 ms 1016 KB
41 WA 646 ms 1072 KB
42 WA 399 ms 960 KB
43 AC 542 ms 932 KB
44 WA 436 ms 1036 KB
45 AC 129 ms 968 KB
46 WA 596 ms 1056 KB
47 WA 410 ms 1036 KB
48 WA 502 ms 912 KB
49 AC 183 ms 892 KB
5 AC 209 ms 1092 KB
6 AC 21 ms 920 KB
7 AC 21 ms 924 KB
8 AC 22 ms 928 KB
9 AC 22 ms 928 KB