Submission #50632807
Source Code Expand
#include <stdio.h>
void eval_segt (double *t, double *lazy, int k, int l, int r, double *acc_w) {
if (lazy[k] != 0.0) {
t[k] += lazy[k]*(acc_w[r]-acc_w[l]);
if (r-l > 1) {
lazy[2*k+1] += lazy[k];
lazy[2*k+2] += lazy[k];
}
}
lazy[k] = 0.0;
return;
}
void add_segt_rec (double *t, double *lazy, int a, int b, double val, int k, int l, int r, double *acc_w) {
eval_segt(t, lazy, k, l, r, acc_w);
if (r <= a || b <= l) {
return;
}
if (a <= l && r <= b) {
lazy[k] = val;
eval_segt(t, lazy, k, l, r, acc_w);
return;
}
add_segt_rec(t, lazy, a, b, val, 2*k+1, l, (l+r)/2, acc_w);
add_segt_rec(t, lazy, a, b, val, 2*k+2, (l+r)/2, r, acc_w);
t[k] = t[2*k+1]+t[2*k+2];
return;
}
void add_segt (double *t, double *lazy, int a, int b, double val, int size, double *acc_w) {
add_segt_rec(t, lazy, a, b, val, 0, 0, size, acc_w);
return;
}
double sum_segt_rec (double *t, double *lazy, int a, int b, int k, int l, int r, double *acc_w) {
double ans = 0.0;
eval_segt(t, lazy, k, l, r, acc_w);
if (r <= a || b <= l) {
return 0.0;
}
if (a <= l && r <= b) {
return t[k];
}
ans += sum_segt_rec(t, lazy, a, b, 2*k+1, l, (l+r)/2, acc_w);
ans += sum_segt_rec(t, lazy, a, b, 2*k+2, (l+r)/2, r, acc_w);
return ans;
}
double sum_segt (double *t, double *lazy, int a, int b, int size, double *acc_w) {
return sum_segt_rec(t, lazy, a, b, 0, 0, size, acc_w);
}
int main () {
int n = 0;
int l = 0;
int d = 0;
int res = 0;
double ans = 0.0;
double over = 0.0;
double pd[400001] = {};
double acc_pd[400001] = {};
double acc_w[1048576] = {};
double over_pd = 0.0;
double t[1048575] = {};
double lazy[1048575] = {};
int size = 1;
double pp[400001] = {};
res = scanf("%d", &n);
res = scanf("%d", &l);
res = scanf("%d", &d);
pd[0] = 1.0;
pd[1] = -1.0;
for (int i = 0; i < l; i++) {
pd[i+1] += ((double)(d+1))*pd[i]/((double)d);
pd[i+d+1] -= pd[i]/((double)d);
if (i+d > n) {
over_pd += pd[i]*((double)(i+d-n))/((double)d);
}
}
for (int i = l; i < l+d; i++) {
pd[i+1] += pd[i];
acc_pd[i+1] = acc_pd[i]+pd[i];
}
for (int i = l+d; i < n+d; i++) {
acc_pd[i+1] = acc_pd[i];
}
for (int i = l+1; i <= n; i++) {
acc_w[i+1] = acc_w[i];
acc_w[i+1] += acc_pd[i];
}
while (size <= n+d) {
size <<= 1;
}
pp[0] = 1.0;
pp[1] = -1.0;
add_segt(t, lazy, 0, 1, 1.0, size, acc_w);
ans = over_pd;
for (int i = 0; i <= n; i++) {
double tmp = sum_segt(t, lazy, i, n+1, size, acc_w);
tmp += over_pd*(1.0-over);
if (tmp > ans) {
ans = tmp;
}
pp[i+1] += ((double)(d+1))*pp[i]/((double)d);
pp[i+d+1] -= pp[i]/((double)d);
add_segt(t, lazy, i+1, i+d+1, pp[i]/((double)d), size, acc_w);
if (i+d > n) {
over += pp[i]*((double)(i+d-n))/((double)d);
}
}
printf("%.16lf\n", ans);
return 0;
}
Submission Info
| Submission Time |
|
| Task |
F - Black Jack |
| User |
chro4896 |
| Language |
C (gcc 12.2.0) |
| Score |
550 |
| Code Size |
3049 Byte |
| Status |
AC |
| Exec Time |
227 ms |
| Memory |
35668 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
550 / 550 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_01.txt, 00_sample_02.txt |
| All |
00_sample_01.txt, 00_sample_02.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_01.txt |
AC |
14 ms |
35636 KiB |
| 00_sample_02.txt |
AC |
187 ms |
35576 KiB |
| 01_test_01.txt |
AC |
128 ms |
35556 KiB |
| 01_test_02.txt |
AC |
129 ms |
35656 KiB |
| 01_test_03.txt |
AC |
94 ms |
35556 KiB |
| 01_test_04.txt |
AC |
15 ms |
35580 KiB |
| 01_test_05.txt |
AC |
53 ms |
35596 KiB |
| 01_test_06.txt |
AC |
159 ms |
35664 KiB |
| 01_test_07.txt |
AC |
107 ms |
35648 KiB |
| 01_test_08.txt |
AC |
44 ms |
35660 KiB |
| 01_test_09.txt |
AC |
140 ms |
35572 KiB |
| 01_test_10.txt |
AC |
97 ms |
35652 KiB |
| 01_test_11.txt |
AC |
182 ms |
35664 KiB |
| 01_test_12.txt |
AC |
160 ms |
35608 KiB |
| 01_test_13.txt |
AC |
165 ms |
35560 KiB |
| 01_test_14.txt |
AC |
192 ms |
35504 KiB |
| 01_test_15.txt |
AC |
176 ms |
35560 KiB |
| 01_test_16.txt |
AC |
188 ms |
35624 KiB |
| 01_test_17.txt |
AC |
188 ms |
35652 KiB |
| 01_test_18.txt |
AC |
186 ms |
35580 KiB |
| 01_test_19.txt |
AC |
227 ms |
35668 KiB |
| 01_test_20.txt |
AC |
188 ms |
35644 KiB |