Submission #103425


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) {
    if (y==0) {
	int n = a.size();
	Poly r(n);
	r[0]=1;
	return r;
    }
    if (y&1) return mulPoly(a, powPoly(a, y-1, c), c);
    return powPoly(mulPoly(a, a, c), y>>1, c);
}
 
 
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 natsugiri
Language C++11 (GCC 4.8.1)
Score 0
Code Size 2370 Byte
Status WA
Exec Time 1267 ms
Memory 3104 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 20 ms 732 KB
10 AC 21 ms 804 KB
11 AC 21 ms 808 KB
12 AC 21 ms 756 KB
13 AC 190 ms 1316 KB
14 AC 57 ms 936 KB
15 AC 21 ms 808 KB
16 AC 33 ms 928 KB
17 AC 142 ms 1196 KB
18 WA 899 ms 2716 KB
19 WA 62 ms 1068 KB
2 AC 21 ms 744 KB
20 WA 33 ms 1060 KB
21 WA 35 ms 928 KB
22 WA 87 ms 1184 KB
23 WA 23 ms 808 KB
24 AC 22 ms 736 KB
25 AC 20 ms 928 KB
26 AC 21 ms 804 KB
27 AC 214 ms 1188 KB
28 AC 20 ms 924 KB
29 AC 21 ms 924 KB
3 AC 19 ms 796 KB
30 AC 20 ms 932 KB
31 AC 208 ms 1184 KB
32 AC 20 ms 804 KB
33 WA 21 ms 804 KB
34 WA 22 ms 924 KB
35 WA 1254 ms 3104 KB
36 AC 22 ms 924 KB
37 WA 23 ms 800 KB
38 WA 23 ms 932 KB
39 WA 1267 ms 2996 KB
4 AC 26 ms 796 KB
40 AC 514 ms 1960 KB
41 WA 722 ms 2212 KB
42 WA 457 ms 1956 KB
43 AC 618 ms 2208 KB
44 WA 493 ms 1956 KB
45 AC 142 ms 1324 KB
46 WA 676 ms 2208 KB
47 WA 463 ms 1952 KB
48 WA 582 ms 2084 KB
49 AC 199 ms 1560 KB
5 AC 209 ms 1248 KB
6 AC 22 ms 800 KB
7 AC 21 ms 800 KB
8 AC 21 ms 932 KB
9 AC 20 ms 800 KB