Решение задач: Составители

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Входные данные


Входной файл INPUT.TXT содержит два целых числа n и m (0 ≤ n, m ≤ 105) — количество взрослых и количество детей в автобусе, соответственно.
Выходные данные. В выходной файл OUTPUT.TXT выведите через пробел два числа — минимальную и максимальную возможную стоимость проезда, если поездка возможна, в противном случае следует вывести «Impossible» (без кавычек).



#include

using namespace std;

int main() {

long v,d,d1;

cin>>v>>d;

if (v==0 and d!=0) {cout<<"Impossible"; return 0;}

if (d==0)

{cout<
d1=d-v;

if (d1<=0) d1=0;
cout<
return 0;

В этой задаче много подводных камней, чтобы понять их добавим примеры 4,5.


Дети не могут ехать без взрослых
Едут только взрослые.
Сколько детей (мах) могут провести взрослые бесплатно? (v) Сколько детей при этом осталось? (d1=d-v) – не может быть<0

Мин.стоимость=взрослые+ d1.

Мах стоимость=взрослые+дети-1 (1 взрослый везет всех детей)



Задача 43 (№ 952) Кастинг (Сложность: 19%)

В театре работает n актеров. Известно, что среди них a – высоких, b – голубоглазых и с – блондинов. Для главной роли в новом спектакле режиссеру требуется только один высокий голубоглазый блондин. Чтобы спланировать свое время для беседы с каждым таким артистом из труппы театра, режиссеру необходимо узнать, какое максимальное или какое минимальное количество артистов из работающих в театре подходит для этой роли.

Требуется написать программу, которая по заданным числам n, a, b и с определяет минимальное или максимальное количество актеров, с которыми режиссер должен переговорить.

Входные данные. Первая строка входного файла INPUT.TXT содержит одно число, которое задает: минимальное или максимальное количество актеров необходимо найти. Это число может принимать следующие значения:

1, если в данном тесте требуется определить минимальное количество актеров;

№

INPUT.TXT

OUTPUT.TXT

1

2
5 3 4 5

3

2

1
5 3 4 5

2

2, если в данном тесте требуется определить максимальное количество актеров.

Вторая строка входного файла содержит разделенные пробелами четыре целых числа: n, a, b, с (1 ≤ n ≤ 10 000, 0 ≤ a ≤ n, 0 ≤ b ≤ n, 0 ≤ c ≤ n).

Выходные данные. В выходной файл OUTPUT.TXT выведите одно число – минимальное или максимальное (в зависимости от входных данных) количество актеров, которые могут претендовать на главную роль в новом спектакле.

#include

#include

using namespace std;

int main (){

int n,a,b,c,k,f,e,max,min,sr;

cin>>k;

cin>>n>>a>>b>>c;

if (a>b) {max=a; min=b;}

else {max=b; min=a;}
sr=c;

if (c>max) {f= max; max=c; sr=f;}

if (c
if (k==2) cout<
else {

e=n-max;

min=min-e;

sr=sr-e;

f= min-(max-sr);

if (min<=0) f=0;

cout<
return 0;}


Расставим данные a, b, с по возрастанию: min, sr, max

Если в тесте требуется определить максимальное количество актеров (k==2), то выводим min (столько актеров обладают всеми тремя свойствами)
Пример: актеров-7, высоких -6(max), голубоглазых -5 (sr), блондинов -4 (min).

Рассмотрим «худший вариант»:

А

А

А

А

А

А

А

В

В

В

В

В

В










Г

Г

Г

Г

Г

Б

Б

Б










Б

  1. находим e=n-max –количество актеров, не обладающих мах свойством

  2. предполагаем, что эти актеры обладают всеми остальными свойствами, значит

min=min-e; sr=sr-e

  1. находим max-sr –количество актеров, не обладающих средним свойством

  2. предполагаем, что эти актеры обладают минимальным свойством, значит

f= min-(max-sr);

  1. Если получим min<=0, то ответ =0

Задача 44 (№ 511) Очередь (Сложность: 20%)

Студент Василий живет в общежитии. Отделение банка, в котором он производит оплату за проживание, имеет всего две кассы, поэтому почти всегда длинная очередь к ним. Первая касса открывается в 8.00, вторая – в 8.05. Последний клиент будет принят в 20.00. Очередь единая, и очередной клиент обслуживается, как только освобождается одна из касс. На обслуживание одного клиента уходит ровно 10 минут. Василий приходит ровно в 8.00 и видит, сколько человек стоит перед ним. Требуется определить, сколько времени ему придется простоять в очереди, и вообще обслужат ли его сегодня.

№

INPUT.TXT

OUTPUT.TXT

1

1

0 0

2

20

1 35

3

235

NO
Входные данные. Входной файл содержит единственное натурально число K – номер Василия в очереди (K < 250). Выходные данные. В выходной файл выводится строка «NO», если Василий сегодня заплатить уже не успеет, и время его ожидания (в формате «X Y», где X – количество целых часов, которые простоит в очереди Василий, и Y – количество минут), если все же успеет заплатить.



#include

using namespace std;

int main() {

int k,x,y,q;

cin>>k;

if (k>145) cout<<"NO"; else{

q=k*5-5;

x=q/60;

y=q% 60;

cout<
return 0; }



На обслуживание 1 человека уходит 5 минут. В день обслуживается 145 человек (60/5*12=144 и еще один человек обслуживается в 20.00)




время на обслуживание очереди до Василия в мин. переводим это время в часы

и минуты



Задача 45 (№ 68) Дом - Школа – Дом (Сложность: 21%)



№

INPUT

OUTPUT

1

Home
1

Yes

2

School
2

No
Мальчик Вася каждый день ездит на метро. Утром он едет в школу, а вечером того же дня, обратно из школы, домой. Для того, чтобы немного сэкономить, он покупает электронную смарт-карту на X поездок. Когда он хочет зайти в метро, он прикладывает карту к турникету. Если на карте осталось ненулевое количество поездок, то турникет пропускает Васю и списывает с карты одну поездку. Если же на карте не осталось поездок, то турникет не пропускает Васю, и он (Вася) вынужден купить на этой же станции новую карту на X поездок и вновь пройти через турникет. Вася заметил, что в связи с тем, что утром метро переполнено, покупать новую карту утром накладно по времени, и он может опоздать в школу. В связи с этим он хочет понять: будет ли такой день, что с утра, поехав в школу, окажется, что у него на карточке ноль поездок. Вася больше никуда на метро не ездит и поэтому заходит в метро только на станции около дома и на станции около школы.

Входные данные. Во входном файле INPUT.TXT содержится ровно 2 строки. В первой содержится слово «School» или «Home» в зависимости от того, где первый раз Вася купил карточку на X поездок. Во второй строке содержится натуральное число X, 1 ≤ X ≤ 1000.

Выходные данные.
В выходной файл OUTPUT.TXT следует вывести «Yes», если будет такой день, что утром у Васи на карточке окажется ноль поездок и «No» в противном случае.





#include

using namespace std;

int main(){

    int a;

    string p;

    cin>>p>>a;

    if (p=="Home" || p=="School" & a%2!=0) {cout<<"Yes";}

    else {cout<<"No";}

    return 0; }


Проверка на нечетность:

a%2!=0 или a%2+0


Задача 46 (№ 499) Турист (Сложность: 22%)

Гена собирается на туристический слет учеников своей школы. В своем классе он был назначен ответственным за палатки. У себя дома он нашел 3 палатки: первая из них весит a1 килограмм и вмещает b1 человек, вторая весит a2 килограмм и вмещает b2 человек, третья весит a3 килограмм и вмещает b3 человек.


№

INPUT.TXT

OUTPUT.TXT

1

10 10
5 5 6 6 4 5

YES

2

10 10
5 5 6 6 7 7

NO
В классе Гены K человек. Выясните, может ли он выбрать палатки так, чтобы в них все могли поместиться. При этом учитывайте, что выбранные палатки должны суммарно весить не более W килограмм.
Входные данные. Первая строка входного файла содержит два целых числа: K и W (1 <= K <= 15, 1 <= W <= 30). Вторая строка содержит шесть целых чисел: a1, b1, a2, b2, a3, b3 (1 <= a1, a2, a3 <= 10, 1 <= b1, b2, b3 <= 15).
Источник: https://tut-files.ru/previewfile/107733