Задача A. Арифметическая прогрессия Задача B. Разбиение на

advertisement
Ханты-Мансийский автономный округ – Югра
Обучающая олимпиада «Пятёрка за неделю»
2011-2012 учебный год
№ 3 – Простая математика
Задача A. Арифметическая прогрессия
(Время: 1 сек. Память: 16 Мб Сложность: 15%)
Заданы первый и второй элементы арифметической прогрессии. Требуется написать
программу, которая вычислит элемент прогрессии по ее номеру.
Входные данные
Входной файл INPUT.TXT содержит три целых числа, разделенных пробелами – первый элемент прогрессии A1 (1 ≤ A1 ≤ 1000), второй элемент прогрессии A2 (1 ≤ A2 ≤ 1000) и
номер требуемого элемента N (1 ≤ N ≤ 1000).
Выходные данные
Выходной файл OUTPUT.TXT должен содержать одно целое число - N-й элемент
арифметической прогрессии.
Пример
№
INPUT.TXT
OUTPUT.TXT
1 5 3
9
1
Разбор
Для решения задачи необходимо вспомнить формулу для n-го члена арифметической
прогрессии an=a1+d·(n-1)=a1+(a2-a1)·(n-1).
Программа
var
a1, a2, n : integer;
an : longint;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
read(a1,a2,n);
an:=a2-a1; an:=a1+an*(n-1);
write(an)
end.
Задача B. Разбиение на части
(Время: 1 сек. Память: 16 Мб Сложность: 21%)
Необходимо представить целое число N в виде суммы M примерно равных чисел. Будем
считать, что числа примерно равны, если они отличаются друг от друга не более чем на единицу.
Входные данные
Во входном файле INPUT.TXT записаны два натуральных числа N и M через пробел,
каждое из которых не превосходит 30000.
Выходные данные
Выходной файл OUTPUT.TXT должен содержать M примерно равных чисел, сумма которых должна быть равна N. Все числа следует вывести в одной строке в порядке неубывания через пробел.
Примеры
№
INPUT.TXT
OUTPUT.TXT
13 4
3 3 3 4
1
72 8
9 9 9 9 9 9 9 9
2
http://acmu.ru
Югорский НИИ ИТ, Югорский ФМЛ
1
Ханты-Мансийский автономный округ – Югра
Обучающая олимпиада «Пятёрка за неделю»
2011-2012 учебный год
№ 3 – Простая математика
Разбор
 N  
N
N
 N   N  
N =   M + N mod M =   + ...  +    + 1 + ...   + 1
M 
M 
M  M  
  M   , где выN mod M раз
ражение в квадратных скобках это целая часть числа, следует, что вначале надо напечатать
N
M-N mod M раз число a =   , а затем N mod M раз число a+1.
M 
Программа
Из соотношения
var
n, m, i, a, b : integer;
begin
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
read(n,m);
a:=n div m; b:=n mod m;
for i:=1 to m-b do write(a,' ');
for i:=1 to b do write(a+1,' ')
end.
Задача C. Оптовая покупка
(Время: 1 сек. Память: 16 Мб Сложность: 27%)
Пара носков стоит 10 руб. 50 коп., связка (12 пар) стоит 102 руб. 50 коп., а коробка
(12 связок) стоит 1140 руб.
Требуется написать программу, которая по числу пар носков, которые хочет купить покупатель, вычисляет количества коробок, связок и пар носков, которые ему следует купить с
наибольшей выгодой.
Входные данные
Входной файл INPUT.TXT содержит натуральное число N (N ≤ 109) – число пар носков,
которые желает купить покупатель.
Выходные данные
Выходной файл OUTPUT.TXT должен содержать три числа (первое – количество коробок, второе – связок, третье – пар носков), разделенные пробелами.
Примеры
№
INPUT.TXT
OUTPUT.TXT
11
0 1 0
1
500
3
5 8
2
Разбор
Обозначим через n1, n2, n3 количество коробок, связок и пар носков, которые следует купить. Оптимальная покупка без излишков находится очевидным образом. Это записано в
первых четырех операторах после ввода в нижеприведенной программе. Удешевить покупку
можно лишь двумя способами – либо взять лишнюю связку и не брать пар, либо взять лишнюю коробку и не брать ни связок, ни пар.
Программа
var
n, m, n1, n2, n3 : longint;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
read(n);
n1:=n div 144;
m:=n mod 144;
n2:=m div 12;
http://acmu.ru
Югорский НИИ ИТ, Югорский ФМЛ
2
Ханты-Мансийский автономный округ – Югра
Обучающая олимпиада «Пятёрка за неделю»
2011-2012 учебный год
№ 3 – Простая математика
n3:= m mod 12;
if n3*105>1025 then
begin n2:=n2+1; n3:=0 end;
if n2*1025+n3*105>11400 then
begin n1:=n1+1; n2:=0; n3:=0 end;
write(n1,' ',n2,' ',n3)
end.
Задача D. Телепортация
(Время: 1 сек. Память: 16 Мб Сложность: 30%)
Вова попал на космическом корабле на бесконечную плоскую планету в точку с координатами (x1, y1). Вова, управляя кораблем, имеет возможность за одну секунду телепортироваться из точки (x, y) в одну из точек (x+C, y+C), (x+C, y-C), (x-C, y+C), (x-C, y-C), где C произвольное натуральное число.
Требуется написать программу, которая определит, через какое минимальное время
Вове удастся достичь точки (x2, y2).
Входные данные
Входной файл INPUT.TXT содержит в первой строке числа x1, y1, во второй – x2, y2.
Все числа целые от нуля до 106. Точки (x1, y1) и (x2, y2) не совпадают.
Выходные данные
Выходной файл OUTPUT.TXT должен содержать одно число – минимальное время телепортации. Если такая телепортация невозможна, то вывести 0.
Пример
№
INPUT.TXT
OUTPUT.TXT
0 0
2
1
0 2
Разбор
Так как корабль может двигаться только по диагоналям, то за одну секунду он может из
одной точки попасть в другую, если эти точки расположены на одной диагонали. Для телепортации через промежуточную точку надо проверить условие целочисленности координат
этой точки.
Программа
var
x1, y1, x2, y2 : longint;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
read(x1,y1,x2,y2);
if (x1+y1=x2+y2)or(x1-y1=x2-y2) then write(1) else
if ((x2-x1+y1+y2) mod 2=0) then write(2) else write(0)
end.
Задача E. Ксерокопии
(Время: 1 сек. Память: 16 Мб Сложность: 38%)
Секретарша Ирочка сегодня опоздала на работу и ей срочно нужно успеть к обеду сделать N копий одного документа. В ее распоряжении имеются два ксерокса, один из которых
копирует лист за х секунд, а другой – за y секунд. Разрешается использовать как один ксерокс, так и оба одновременно. Можно копировать не только с оригинала, но и с копии. Помогите ей выяснить, какое минимальное время для этого потребуется.
Входные данные
Во входном файле INPUT.TXT записаны три натуральных числа N, x и y, разделенные
пробелом (1 ≤ N ≤ 2·108, 1 ≤ x, y ≤ 10).
http://acmu.ru
Югорский НИИ ИТ, Югорский ФМЛ
3
Ханты-Мансийский автономный округ – Югра
Обучающая олимпиада «Пятёрка за неделю»
2011-2012 учебный год
№ 3 – Простая математика
Выходные данные
В выходной файл OUTPUT.TXT выведите одно число – минимальное время в секундах,
необходимое для получения N копий.
Примеры
№
INPUT.TXT
OUTPUT.TXT
4 1 1
3
1
5 1 2
4
2
Разбор
Сделаем на быстром ксероксе одну копию. Теперь у нас есть два экземпляра документа и
нам надо сделать еще N-1 копию. Заметим теперь, что за время T можно сделать T div x + T
div y копий. Для решения применим метод деления отрезка пополам для нахождения минимального времени, за которое можно сделать эти N-1 копии.
Программа
var
n, x, y, i, j, l, r, now : longint;
begin
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
read(n,i,j);
if i<j then x:=i else x:=j;
if i>j then y:=i else y:=j;
l:=0; r:=(n-1)*y;
while l<>r do
begin
now:=(l+r)div 2;
j:=now div x + now div y;
if j<n-1 then l:=now+1 else r:=now
end;
write(r+x);
close(output)
end.
http://acmu.ru
Югорский НИИ ИТ, Югорский ФМЛ
4
Download