Олимпиадный тренинг

Задача . G. Кузя и домашнее задание


Кузя начал ходить в школу. На уроке математики ему дали домашнее задание. Для этого задания ему выдали массив натуральных чисел \(a\) длины \(n\) и массив символов \(b\) длины \(n\), состоящий только из символов '*' или '/'.

Давайте определим траекторию вычислений для отрезка \([l; r]\) (\(1 \le l \le r \le n\)) следующим образом:

  • Пусть изначально \(x=1\). Для всех \(i\) от \(l\) до \(r\) последовательно выполним следующее: если \(b_i=\) '*', \(x=x*a_i\), а если \(b_i=\) '/', то \(x=\frac{x}{a_i}\). Траекторией вычисления для отрезка \([l; r]\) назовем список всех \(x\), которые были получены в процессе вычислений (их будет ровно \(r - l + 1\)).

Например, пусть \(a=[7,\) \(12,\) \(3,\) \(5,\) \(4,\) \(10,\) \(9]\), \(b=[/,\) \(*,\) \(/,\) \(/,\) \(/,\) \(*,\) \(*]\), \(l=2\), \(r=6\), тогда траектория вычислений для этого отрезка — это \([12,\) \(4,\) \(0.8,\) \(0.2,\) \(2]\).

Давайте назовем отрезок \([l;r]\) простым, если траектория вычислений для него содержит только целые числа.

Кузе нужно посчитать количество простых отрезков \([l;r]\) (\(1 \le l \le r \le n\)). Так как у него явно нет ни времени, ни желания проводить вычисления для всех вариантов, он попросил вас написать программу, чтобы узнать это количество!

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)).

Третья строка содержит \(n\) символов без пробелов между ними — массив \(b_1, b_2 \ldots b_n\) (\(b_i=\) '/' или \(b_i=\) '*' для всех \(1 \le i \le n\)).

Выходные данные

В единственной строке выведите одно целое число — количество простых отрезков \([l;r]\).


Примеры
Входные данныеВыходные данные
1 3
1 2 3
*/*
2
2 7
6 4 10 1 2 15 1
*/*/*//
8

time 2000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя