D. унисон ≡
входной файл:
стандартный вход
ограничение времени:
1 сек
выходной файл:
стандартный выход
ограничение памяти:
512 мб
максимальный :
100
условие
два друга-ирландца фаолан и леон любят петь, особенно в праздники, когда они могут собраться и петь песни вместе. хоть они и друзья, у них не так много общих песен, но это не мешает им пытаться петь разные песни одновременно.
друзья обнаружили, что разные строки двух песен совместимы и могут быть спеты в унисон, если у строк одинаковая интонация, а количество слогов в этих строках совпадает. интонация строки считается восклицательной, если в строке есть восклицательный знак (ascii 33), и нейтральной во всех остальных случаях.
для слогораздела фаолан предлагает использовать общепринятую систему, в которой слогообразующим является гласный звук, и при этом два гласных звука не могут находиться в пределах одного слога. в случае, когда слово целиком состоит из согласных, оно за слог не считается, а производимый им согласный звук сливается со слогом в следующем или предыдущем слове.
когда фаолан и леон поют, они следуют по текстам своих песен слева направо, сверху вниз, с удовольствием распевая в унисон совместимые строки и пропуская все остальные.
сейчас друзья планируют заранее свое выступление, и им интересно, для данных двух песен, сколько суммарно децисекунд они могут пропеть в унисон при условии, что каждый слог пропевается в течение одной децисекунды. естественно, друзей интересует максимально возможная величина.
формат входных данных
в первой строке входных данных содержатся целые числа
n
m
nm
: количество строк в первой и второй песне соответственно. далее следуют
n
+
m
n+m
строк, содержащих текст первой и затем второй песни. каждая строка может состоять только из печатных ascii символов.
формат выходных данных
выходные данные должны содержать одно целое число: максимальное количество децисекунд, в течение которых друзья могут петь в унисон.
ограничения
1
≤
n
,
m
≤
10
6
1≤n,m≤106
n
∗
m
≤
10
7
n∗m≤107
длина каждой строки не превосходит
50
50
.
переменные а,с присваивают тип integer, т.е. целые числа; b присваивает тип string, т.е строковый тип
begin - начало программы
readln - оператор ввода, окончание ln осуществляет переход на новую строку
str(a,b) - т.е. преобразовать данные числа в строку
переменная b так же присваивает тип строковый
Val(b,a,c) где: b- строка, а-результат, с-позиция с которой произошла ошибка преобразования или 0
writeln(а) - оператор вывода, окончание ln осуществляет переход на новую строку
end. - конец программы
begin
var n:=ReadInteger('Кол-во элементов:');
var a:=ArrRandomReal(n,-10,20); a.Println;
Writeln('С округлением если |x|<1');
for var i:=0 to n-1 do
if abs(a[i])<1 then a[i]:=Round(a[i]);
a.Println
end.
Тестовое решение:
Кол-во элементов: 10
-0.751956142835299 5.95022566427953 3.58861613254464 7.42331713783709 -4.75036238075717 -9.41228387384316 -0.700975591643235 3.85500546258642 -1.94321916994789 19.3021338336645
С округлением если |x|<1
-1 5.95022566427953 3.58861613254464 7.42331713783709 -4.75036238075717 -9.41228387384316 -1 3.85500546258642 -1.94321916994789 19.3021338336645