Популярная песня Имя входного файла: input.txt
Имя выходного файла: output.txt
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
В Диманово по радио круглые сутки крутят новый хит. А Роме, как математику, очень интересно,
почему какие-то песни становятся популярными, а какие-то нет.
Для простоты Роман представил ноты цифрами от 1 до 7 и записал мелодию как строку, состоящую только из этих цифр. Проанализировав хит-парад за последние несколько лет, он определил,
что некоторые фрагменты мелодий положительно влияют на популярность песен, а некоторые —
отрицательно. Фрагментом Рома называет несколько подряд идущих нот в упрощенной записи.
Заметим, что в одной и той же песне несколько фрагментов могут пересекаться.
Собрав такую информацию, Рома планирует открыть новое направление в анализе данных: он
хочет предсказывать, будет ли новая песня популярной у слушателей. Однако вручную проверять
каждую песню очень долго, и он просит вас написать для этого программу.
Формат входных данных
Первая строка входного файла содержит упрощенную запись песни, которая состоит из N цифр
от 1 до 7 (1 ⩽ N ⩽ 2 · 105
).
Во второй строке входного файла содержится число M — количество фрагментов, вхождение
которых в песню необходимо проверить (1 ⩽ M ⩽ 105
).
В следующих M строках заданы сами фрагменты мелодий Ai и их вклад в популярность песни
Bi (1 ⩽ i ⩽ M, |Bi
| ⩽ 105
). Каждый фрагмент задается строкой не более чем из 20 символов,
состоящей только из цифр от 1 до 7.
Формат выходных данных
ответ должен содержать одно целое число — итоговое значение популярности песни
//Вариант по формуле Бине
Var
n,fibn:real;
i:integer;
begin
readln(n);
if n<=0 then writeln('Не существует чисел Фиббоначи меньше 0')
else
begin
i:=0;
while fibn<n do
begin
fibn:=(power((1+sqrt(5))/2,i)-power((1-sqrt(5))/2,i))/sqrt(5);
inc(i);
end;
writeln((power((1+sqrt(5))/2,i)-power((1-sqrt(5))/2,i))/sqrt(5)-1);
end;
end.
//В лоб
Var
sum,n,buf,fib0,fib1:integer;
function fibb(fib0,fib1:integer):integer;
begin
result:=fib0+fib1;
end;
begin
fib0:=0;
fib1:=1;
readln(n);
if n<=0 then
writeln('Не существует чисел Фиббоначи меньше 0')
else
begin
if fibb(fib0,fib1)>=n then sum:=0 else
begin
while fibb(fib0,fib1)<n do
begin
buf:=fib1;
fib1:=fibb(fib0,fib1);
fib0:=buf;
end;
sum:=fibb(fib1,fibb(fib0,fib1))-1;
end;
writeln(sum);
end;
end.
Пример ввода:
12
Пример вывода:
20