Приближается очередная олимпиада по программированию, и товарищи A и B решили устроить совместную тренировку. Они выбрали n задач и договорились,
10-11 класс
|
что тренировка продлится t минут.Для каждой задачи известно время si (i = 1; 2; : : : ; n), которое потребуется на её решение. Уровень подготовки у товарищей A и B одинаковый, и если товарищ A решает некоторую задачу за время s, то и товарищ B решает эту задачу за это же время s.Товарищ A начал решать задачи с первой и будет решать их подряд, двигаясь от первой к последней и не пропуская ни одной. Товарищ B начал решать задачи с последней и тоже будетрешать их подряд, двигаясь от последней к первой и не пропуская ни одной.Ваша же задача — определить, сколько задач решат в течение тренировки товарищи A и B.В качестве ответа выведите два целых числа: количество задач, которые решит товарищ A, и через пробел — количество задач, которые решит товарищ B.
Формат входного файла
В первой строке содержатся через пробел два целых числа — n (1 n 100) и t (1 t 1000).
Во второй строке содержатся n целых чисел s1; s2; : : : sn (1 si 1000; i = 1; 2; : : : ; n), также отделённые друг от друга пробелом.
Формат выходного файла
В единственной строке выходного файла содержатся два целых числа через пробел — количество задач, которые решит товарищ A, и количество задач, которые решит товарищ B соответственно.
На Паскаль :)
var s: array[1..100] of integer;
i, n, t, a_t, b_t, a_n, b_n : integer;
Begin
read(n,t);
for i := 1 to n do read(s[i]);
for i := 1 to n do begin
if a_t + s[i] <= t then do begin
a_n := a_n + 1;
a_t := a_t + s[i];
end;
if b_t + s[n-i+1] <= t then do begin
b_n := b_n + 1;
b_t := b_t + s[n-i+1];
end;
end;
writeln(a_n:3, b_n:3);
End.
Program Zadacha;
Const n = 1; t = 2; min = 1; nMax = 100; tMax = 1000;
Var text: Text;
vars: Array [min..2] Of Integer;
s: Array Of Integer;
i, an, bn, at, bt: Integer;
BeginAssign(text, 'd:\input.txt');
Reset(text);
i := 1;
While Not Eof(text) Do
Begin
If i > 2 Then
Read(text, s[i - 2])
Else
Read(text, vars[i]);
i := i + 1;
If i = 3 Then
SetLength(s, vars[n] + 1);
If (i - 2) > vars[n] Then
Break;
End;
Close(text);
If ((vars[n] < 1) Or (vars[n] > nMax)) Or ((vars[t] < 1) Or (vars[t] > tMax)) Then
WriteLn('Неверные входные данные! Завершение работы программы.')
Else
Begin
For i := 1 To vars[n] Do
Begin
at := at + s[i];
If (at <= vars[t]) And ((an + bn) < vars[n]) Then
an := an + 1;
bt := bt + s[a[n] - i + 1];
If (bt <= vars[t]) And ((an + bn) < vars[n]) Then
bn := bn + 1;
End;
Assign(text, 'd:\output.txt');
Rewrite(text);Write(text, an, ' ');
Write(text, bn, ' ');
Close(text);
End;
ReadLn;
End.
Другие вопросы из категории
использования. Пример: Введите число: 100 сумма = 5050
"5":
Составить функцию, которая определяет, сколько зерен попросил положить на N-ую клетку изобретатель шахмат (на 1-ую – 1 зерно, на 2-ую – 2 зерна, на 3-ю – 4 зерна, …) Пример: Введите номер клетки: 28 На 28-ой клетке 134217728 зерен.
целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов.
Помагите плииз)!!
9 букв и 7 цифр? Требуемый для записи этого объем информации?
Читайте также
по 5 и 6 классам приняли участие 59
детей. Каждому участнику
присваивается шифр - произвольное
число, оканчивающееся номером
класса, в котором он учится, оказалось,
что сумма шифров пятиклассников
равна сумме шифров шестиклассников.
На следующий год в олимпиаде по 6 и 7
классам приняли участие эти же 59
ребят. Могли ли суммы шифров этих
шестиклассников и семиклассников
оказаться равными? Ответ обоснуйте
учительница спросила, кто из них победил. Илья сказал: « Это я победил, а не Костя или Серёжа ». Костя сказал: « Это Серёжа победил, а Илья всегда лжёт ». Серёжа сказал: « Победил не Костя, а Илья всегда говорит правду ». Учительница знает, что один из ребят всегда говорит правду, другой – всегда лжёт, а третий говорит через раз то ложь, то правду, но не знает, кто из них правдив, а кто – нет. кто победитель?
Муниципальный этап олимпиады по информатике проводился для учеников
7–11-х классов. Все ученики участвовали в общем конкурсе. Каждый
участник олимпиады мог набрать от 0 до 400 баллов. По положению об
олимпиаде победителем признаётся участник, набравший наибольшее
количество баллов, при условии, что им набрано больше половины
возможных баллов. Победителей может быть несколько, если это количество
баллов наберут несколько человек; а может и не быть совсем, если никто не
наберёт больше половины.
Напишите эффективную по времени работы и по используемой памяти
программу (укажите используемую версию языка программирования,
например Borland Pascal 7.0), которая будет определять фамилию и имя
лучшего участника, не ставшего победителем олимпиады. Если следующий
за баллом победителей один и тот же балл набрали несколько человек или
если победителей нет, а лучших участников несколько (в этом случае они же
являются искомыми), то должно выдаваться только число искомых
участников. Гарантируется, что искомые участники (участник) имеются.
На вход программе сначала подаётся число участников олимпиады N
(N<10000).
В каждой из следующих N строк находится результат одного из участников
олимпиады в следующем формате:
<Фамилия> <Имя> <класс> <баллы>,
где <Фамилия> – строка, состоящая не более чем из 20 непробельных
символов; <Имя> – строка, состоящая не более чем из 15 непробельных
символов; <класс> – число от 7 до 11; <баллы> – целое число от 0 до 400
набранных участником баллов. <Фамилия> и <Имя>, <Имя> и <класс>,
а также <класс> и <баллы> разделены одним пробелом. Пример входной
строки:
Иванов Пётр 10 275
Программа должна выводить через пробел Фамилию и Имя искомого
участника или их число. Пример выходных данных:
Кузнецов Иван
Второй вариант выходных данных:
4
1. Если Миша идёт, то идёт Аня, но не идёт Маша.
2. Если Маша не идёт на олимпиаду, то идёт Аня, но не идёт Миша.
3. Если Аня идёт, то идёт Миша, но не идёт Маша.
четвертая часть изучает природу, седьмая часть проводит время в молчаливом размышлении, остальную часть составляют 3 девы".
Секретарь олимпиады на вопрос: "Сколько зарегистрировано участников олимпиады по информатике?", отвечал подобно Пифагору: "K-тая часть участников начала решать первую задачу, M-тая часть – вторую, а N-тая – третью. В то же время D участников решают проблему: "С чего начать?". Ваша задача определить количество участников олимпиады S или вывести -1, если секретарь ошибся.
Технические условия
Входные данные
В единственной строке через пробел числа K, N, M, D. 1 ≤ K, N, M, D ≤ 1000.
Выходные данные
Вывести количество участников олимпиады S, или -1, если секретарь ошибся в своём сообщении.