Розв'язок за O(n^3). Переберемо всі можливі інтервали [i; j]~(0 \le i \le j < n) і перевіримо, чи міститься в них середня квітка. Для цього повинно існувати таке p_k~(i \le k \le j), що
де totalPetals — загальна кількість пелюсток у квіток на інтервалі .
Реалізація алгоритму — O(n^3)
Оголосимо масив для зберігання кількості пелюстків p_i у кожній квітці.
#define MAX 101
int p[MAX];Читаємо вхідні дані.
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &p[i]);Кількість фотографій, на яких присутня середня квітка, зберігатимемо у змінній .
photos = 0;Переберемо всі можливі інтервали [i; j]~(0 \le i \le j < n) і перевіримо, чи збігається середнє арифметичне числа пелюсток квіток на цьому інтервалі з кількістю пелюстків хоча б однієї з них.
for (i = 0; i < n; i++)
for (j = i; j < n; j++)
{У змінній totalPetals зберігаємо загальну кількість пелюсток у квіток на інтервалі .
int totalPetals = 0;
for (k = i; k <= j; k++)
totalPetals += p[k];Перебираємо значення p_k на інтервалі [i; j]~(i \le k \le j). Якщо p_k збігається зі середнім арифметичним числа пелюсток серед усіх квіток фотографії на інтервалі , то збільшуємо значення на . Для цього повинна виконуватися умова:
present = 0;
for (int k = i; k <= j; k++)
if (p[k] * (j - i + 1) == totalPetals) present = 1;
if (present) photos++;
}Виводимо відповідь.
printf("%d\n", photos);