lenapelevina0
21.03.2021 14:12

#include

#include

#include

#include

#define NN 1000000

#define eps 1e-7

int n;

double C;

double a[NN], p[NN];

int h[NN];

int s, t, i, j;

double l, r;

double

get_h (void)

{

assert (s < t);

return a[h[s]];

}

int

pop_h (void)

{

assert (s < t);

return h[s++];

}

void

push_h (int x)

{

while (s < t && a[h[t - 1]] < a[x])

t--;

h[t++] = x;

}

int

main (int argc, char *argv[])

{

double ev, ev1, ev2;

int x;

scanf ("%d%lf", &n, &C);

for (i = 0; i < n - 1; i++)

scanf ("%lf", &a[i]);

for (i = 0; i < n; i++)

p[i] = 0;

s = 0; t = 0;

i = 0; j = 1;

l = C; r = 0;

push_h (0);

// printf('\n');

while (j < n && i < j && l > a[j - 1] + eps)

{

ev1 = (l - r) * (j - i) / (j - i + 1);

if (s < t)

{

ev2 = (l - get_h ()) * (j - i);

ev = (ev1 < ev2) ? ev1 : ev2;

}

else

ev = ev1;

l -= ev / (j - i);

r += ev;

assert (l + eps > r);

if (fabs (l - r) < eps)

{

push_h (j);

j++;

r = 0;

}

if (fabs (l - get_h ()) < eps)

{

x = pop_h ();

for (; i <= x; i++){

p[i] = l;

}

i = x + 1;

}

if ((i == j) || (l < a[j - 1] + eps))

{

for (; i < j; i++){

p[i] = l;

}

l = r;

r = 0;

i = j;

push_h (j);

j++;

}

}

for (; i < j; i++){

p[i] = l;

}

for (i = 0; i < n; i++)

printf ("%0.20lf\n", p[i]);

return 0;

}

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
228666228666228
30.12.2022 03:24

В город М напрямую можно попасть только из города Н (в который напрямую можно попасть только из города Ж), и из города Ж. Значит, для любого пути в Ж из А есть два варианта, как проехать в М.

В город Ж можно попасть напрямую из городов В, Г, и Д. В город В из города А можно попасть тремя путями: АБВ, АГВ и АБГВ, в город Г - двумя: АГ и АБГ, в город Е - тремя: АГЕ, АДЕ и АБГЕ.

Итого: Из города А в город Ж есть 3+2+3=8 путей, из Ж в М - 2 пути. Для каждого пути из А в Ж есть оба варианта пути из Ж в М, поэтому умножаем: 8×2=16 путей.

ответ: 16 путей

Буду очень благодарен, если Вы отметите мой ответ как лучший!

0,0(0 оценок)
Ответ:
rozarafo5
06.04.2021 21:24

var a,b,c,d,res: integer;

begin

write('Введите a: ');

readln(a);

write('Введите b: ');

readln(b);

write('Введите c: ');

readln(c);

write('Введите d: ');

readln(d);

res := a;

// Проверяем число b

if (b mod 10 > res mod 10) then res:=b

else if (b mod 10 = res mod 10) then

 begin

 if (res<b) then res:=b;

 end;

// Проверяем число c

if (c mod 10 > res mod 10) then res:=c

else if (c mod 10 = res mod 10) then

 begin

 if (res<c) then res:=c;

 end;

 

// Проверяем число d

if (d mod 10 > res mod 10) then res:=d

else if (d mod 10 = res mod 10) then

 begin

 if (res<d) then res:=d;

 end;

 

writeln('Число с наибольшей последней цифрой: ',res);

end.

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота