Submission #103424


Source Code Expand

import java.io.*;
import java.util.*;
import java.lang.*;

class Reader {
    BufferedReader br;
    StringTokenizer st;
    Reader(InputStream is) {
	br = new BufferedReader(new InputStreamReader(is));
	st = null;
    }
    String next() {
	while (st == null || !st.hasMoreTokens()) {
	    try {
		st = new StringTokenizer(br.readLine());
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
	return st.nextToken();
    }
    int nextInt() {
	return Integer.parseInt(next());
    }
    Long nextLong() {
	return Long.parseLong(next());
    }
    double nextDouble() {
	return Double.parseDouble(next());
    }
}

class Poly {
    double[] mul(double[] a, double[] b, double[] c) {
	int n = a.length;
	double[] r = new double[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];
	    }
	}
	double[] s = new double[n];
	System.arraycopy(r, 0, s, 0, n);
	return s;
    }
    double[] pow(double[] a, Long y, double[] c) {
	int n = a.length;
	double[] r = new double[n];
	r[0] = 1;
	for (; y > 0; y >>= 1) {
	    if ((y&1) == 1) r = mul(r, a, c);
	    a = mul(a, a, c);
	}
	return r;
    }
}

class Main {
    public static void main(String[] args) {
	new Main().solve();
    }
    void solve() {
	Reader in = new Reader(System.in);
	PrintStream out = System.out;

	double p = in.nextDouble();
	double q = in.nextDouble();
	double r = in.nextDouble();

	int N = in.nextInt();
	int K = in.nextInt();
	long M = in.nextLong();

	double[] v = new double[N*K+1];
	double 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;

	double[] alpha = new double[N*K+1];
	alpha[0] = 0;
	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.0;
	    alpha[i] /= base;
	}

	double[] beta = new double[N*K+1];
	beta[1] = 1;
	beta = new Poly().pow(beta, M*N, v);

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

	out.format("%.6f\n", ans);
    }
}

Submission Info

Submission Time
Task B - Cans of Toys
User natsugiri
Language Java (OpenJDK 1.7.0)
Score 0
Code Size 2321 Byte
Status WA
Exec Time 1006 ms
Memory 24772 KB

Judge Result

Set Name all
Score / Max Score 0 / 100
Status
AC × 25
WA × 24
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 431 ms 21172 KB
10 AC 415 ms 21296 KB
11 AC 417 ms 21304 KB
12 AC 424 ms 22836 KB
13 AC 524 ms 23372 KB
14 AC 464 ms 23120 KB
15 AC 425 ms 22708 KB
16 AC 450 ms 22968 KB
17 AC 507 ms 23368 KB
18 WA 829 ms 24520 KB
19 WA 476 ms 23224 KB
2 AC 420 ms 21172 KB
20 WA 460 ms 23116 KB
21 WA 457 ms 23116 KB
22 WA 479 ms 23340 KB
23 WA 453 ms 22700 KB
24 AC 426 ms 21296 KB
25 AC 425 ms 22604 KB
26 AC 425 ms 21296 KB
27 AC 544 ms 23368 KB
28 AC 429 ms 21288 KB
29 AC 435 ms 22592 KB
3 AC 424 ms 21268 KB
30 AC 429 ms 21296 KB
31 AC 551 ms 23244 KB
32 WA 426 ms 21256 KB
33 WA 429 ms 22604 KB
34 WA 453 ms 22840 KB
35 WA 1000 ms 24656 KB
36 WA 429 ms 21304 KB
37 WA 442 ms 22704 KB
38 WA 437 ms 22712 KB
39 WA 1006 ms 24772 KB
4 AC 428 ms 21296 KB
40 WA 672 ms 24136 KB
41 WA 770 ms 24252 KB
42 WA 648 ms 24004 KB
43 WA 725 ms 24140 KB
44 WA 677 ms 24012 KB
45 WA 507 ms 23504 KB
46 WA 750 ms 24140 KB
47 WA 639 ms 24008 KB
48 WA 706 ms 24260 KB
49 WA 531 ms 23632 KB
5 AC 542 ms 23216 KB
6 AC 429 ms 22836 KB
7 AC 422 ms 21296 KB
8 AC 422 ms 21292 KB
9 AC 426 ms 21296 KB