O(n^3) həll üsulu. Bütün mümkün intervalları [i; j]~(0 \le i \le j < n) yoxlayaraq, bu intervallarda orta gülü tapıb-tapmadığımızı yoxlayırıq. Bunun üçün belə bir p_k~(i \le k \le j) mövcud olmalıdır ki,
burada totalPetals — intervalında olan güllərin ümumi ləçək sayını göstərir.
Alqoritmın reallaşdırılması — O(n^3)
Hər bir gülün ləçək sayını saxlamaq üçün bir massiv elan edək.
#define MAX 101
int p[MAX];Giriş məlumatlarını oxuyuruq.
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &p[i]);Orta gülün iştirak etdiyi şəkillərin sayını dəyişənində saxlayacağıq.
photos = 0;Bütün mümkün intervalları [i; j]~(0 \le i \le j < n) yoxlayaraq, bu intervallardakı güllərin ləçək saylarının arifmetik ortasının onlardan ən az birinin ləçək sayına uyğun gəlib-gəlmədiyini yoxlayırıq.
for (i = 0; i < n; i++)
for (j = i; j < n; j++)
{totalPetals dəyişənində intervalı üzrə güllərin ləçək saylarının cəmini saxlayırıq.
int totalPetals = 0;
for (k = i; k <= j; k++)
totalPetals += p[k];Intervalda hər bir p_k qiymətini [i; j]~(i \le k \le j) yoxlayırıq. Əgər p_k intervalında fotoşəkildəki bütün güllərin ləçək saylarının arifmetik ortasına bərabərdirsə, dəyişəninin dəyərini artırırıq. Bunun üçün aşağıdakı şərt təmin edilməlidir:
present = 0;
for (int k = i; k <= j; k++)
if (p[k] * (j - i + 1) == totalPetals) present = 1;
if (present) photos++;
}Cavabı çıxışa veririk.
printf("%d\n", photos);