• Преподавателю
  • Информатика
  • Олимпиадная задача школьного этапа Всероссийской олимпиады школьников по информатике 2015-2016 учебный год

Олимпиадная задача школьного этапа Всероссийской олимпиады школьников по информатике 2015-2016 учебный год

Условие задачи взято на сайте http://contest.ncstu.ru/ Ох уж эти ученые... Имя входного файла input.txt Имя выходного файла output.txt Максимальное время работы на одном тесте 2 секунды Ограничение по памяти 64 МБ "...Британские ученые выяснили, что чаще всего взламывают пароли, содержащие группы одинаковых подряд идущих символов, пробелы и звездочки, и гораздо реже пароли, содержащие многоточия..." Услышав эту новость, Вас...
Раздел Информатика
Класс 11 класс
Тип Другие методич. материалы
Автор
Дата
Формат doc
Изображения Нет
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

Условие задачи взято на сайте contest.ncstu.ru/

Ох уж эти ученые...

Имя входного файла

input.txt

Имя выходного файла

output.txt

Максимальное время работы на одном тесте

2 секунды

Ограничение по памяти

64 МБ

"...Британские ученые выяснили, что чаще всего взламывают пароли, содержащие группы одинаковых подряд идущих символов, пробелы и звездочки, и гораздо реже пароли, содержащие многоточия..."

Услышав эту новость, Вася крепко задумался: почти все его пароли попадают в группу риска!!! Для того чтобы исправить ситуацию, он решил конвертировать все свои пароли по следующему правилу: от группы одинаковых символов оставить один, два и более пробелов заменить на знак подчёркивания, а две и более звездочки - на многоточие. Напишите программу, которая будет быстро и правильно производить конвертацию пароля.

Формат входных данных:

Задан пароль - непустая строка длиной до 100 000 символов, которая может состоять из строчных букв латинского алфавита, пробелов и символов '*'.

Формат выходных данных:

Выведите пароль, полученный после конвертации.

Пример

input.txt

output.txt

abcd

abcd

aaabbc**

abc...

Описание алгоритма:

  1. Читаем посимвольно до конца файла.

  2. Идём по массиву. Если текущий символ не равен следующему то:

    1. если символ повторялся и является буквой, то выводим этот символ

    2. если символ повторялся и является * то выводим . . .

    3. если символ повторялся и является пробелом, то выводим _

    4. если символ не повторялся, то выводим его

    5. переходим к следующему символу

    6. сбрасываем переменную повторов

если текущий символ равен следующему, то наращиваем переменную повторов

повторяем до конца массива символов.





program scientist;

var

i,n,schet:integer;

akk:char;

a:array[1..100001] of char;

begin

assign(input,'input.txt');

assign(output,'output.txt');

reset(input);

rewrite(output);

while not eof(input) do begin

inc(i);

read(input,a[i]);

inc(n);

end;

//for i:=1 to n do

//write(a[i]);

akk:=a[1];

schet:=1;

for i:=2 to n+1 do begin

if ord(akk)<>ord(a[i]) then begin

if (schet>=2) and (akk in ['a'..'z']) then

write(output,akk);

if (schet>=2) and (akk='*') then

write(output,'...');

if (schet>=2) and (akk=' ') then

write(output,'_');

if schet=1 then

write(output,akk);

akk:=a[i];

schet:=0;

end;

if ord(akk)=ord(a[i]) then

inc(schet);

end;

close(input);

close(output);

end.

© 2010-2022