Дизайн вагонов
Вагоны новой кольцевой железной дороги было предложено расписать N дизайнерам. Каждый дизайнер выбирал для своей раскраски полосу длиной li, начинающуюся от начала вагона и гарантированно помещающуюся на вагоне. Тем самым какие-то работы были полностью закрашены, а какие-то всё же были видны хотя бы частично.
Вам дана последовательность перекраски. После завершения работы каждого дизайнера выведите одно число — количество различных работ, элементы которых видны на момент завершения.
Формат ввода
В первой строке дано количество дизайнеров 1 ≤ N ≤ 105 Во второй строке через пробел даны N целых чисел 1 ≤ li ≤ 109 – длины полос.
Формат вывода
Выведите N чисел через пробел. i-е из этих чисел соответствует количеству различных работ, элементы которых видны после завершения работы i-го дизайнера.
Примеры:
Ввод
3
1 3 2
Вывод
1
1
2
Что здесь требуется, и на что влияет l?
function DelWord(s:string):string;
var
i,n:integer;
begin
n:=length(s);
i:=n;
repeat
if i>=1 then Dec(i);
until s[i]=' ';
Delete(s,i+1,n-i);
DelWord:=s
end;
var
st:string;
begin
Write('Введите строку: '); Readln(st);
Writeln('Результат: ',DelWord(st))
end.
Тестовое решение:
Введите строку: А роза упала на лапу Азора
Результат: А роза упала на лапу
//PascalABC.Net
function DescDigits(s:string):boolean;
var
desc:boolean;
i,n:integer;
c1,c2:char;
begin
n:=length(s);
desc:=true;
c1:='A'; { главное, чтобы символ был "старше" любой цифры }
i:=1;
repeat
c2:=s[i];
if c2 in ['0'..'9'] then
if c2<c1 then c1:=c2 else desc:=false;
Inc(i)
until (i>n) or (not desc);
DescDigits:=desc
end;
var
s:string;
begin
Write('Введите строку: '); Readln(s);
if DescDigits(s) then Writeln('true') else Writeln('false')
end.
Тестовое решение:
Введите строку: Пример строки с цифрами 98 по убыванию 7 6,5, так4тоже1можно!
true
Вариант первой программы для Borland Pascal 7.01
uses Crt;
function DelWord(s:string):string;
var
i,n:integer;
begin
n:=length(s);
i:=n;
repeat
if i>=1 then Dec(i);
until s[i]=' ';
Delete(s,i+1,n-i);
DelWord:=s
end;
var
st:string;
begin
ClrScr;
Write('Введите строку: '); Readln(st);
Writeln('Результат: ',DelWord(st));
ReadKey
end.
Исходное число делится с остатком на 2 при этом частное запоминаем для дальнейших операций, а остаток записываем в младший бит двоичного числа. Затем частное снова делится на 2 и остаток записывается в следующий разряд И так до тех пор, пока не получится такой результат - частное равно 0 а остаток равен 1.
Разберем пример с десятичным числом 2001
2001/2=1000 ост 1 (1й остаток младший разряд (крайний справа))
1000/2=500 ост 0
500/2=250 ост 0
250/2=125 ост 0
125/2=62 ост 1
62/2=31 ост 0
31/2=15 ост 1
15/2=7 ост 1
7/2=3 ост 1
3/2=1 ост 1
1/2=0 ост 1 (Старший разряд (крайний слева))
Теперь "Вписываем" остатки, в разряды двоичного числа, начиная с 1-го младшего:
11111010001
Т.е.
Аналогично переводим десятичное 10
10/2=5 ост 0
5/2=2 ост 1
2/2=1 ост 0
1/2=0 ост 1
И 21 десятичное
21/2=10 ост 1
10/2=5 ост 0
5/2=2 ост 1
2/2=1 ост 0
1/2=0 ост 1
ИТОГО Получится этакое ЧУДО, когда все соберем
P.S. Можно проверить калькулятором. Стандарный WINDOWS калькулятор может переводить из одной системы счисления в другую.