Tutaq ki, tərəfi olan üçbucaq üzərində düşünürük. Onun üçüncü zirvəsini ilə təmsil edək, onda üçbucaq (1, n, x) formasında olacaqdır.
Əgər x = n - 1 olsa, sadəcə (1, n, n - 1) üçbucağını atırıq və nəticədə (n - 1) - bucaqlının qalan hissəsini üçbucaqlamağa davam edirik.
Əgər 1 < x < n - 1 olsa, onda (n, x, k) üçbucağına baxırıq, harada x < k < n.
Cüt üçbucaq (1, x, n) və (n, x, k) əvəzinə (1, x, k) və (1, n, k) cütünü dəyişirik. Üçbucaqların ümumi çəkisi azalır, çünki xn + xnk > xk + nk. Qruplaşdırmadan sonra belə olur:
Bərabərlik düzgündür, çünki n - k > 0 və x - 1 > 0.
Buradan belə nəticəyə gəlirik ki, (1, x, n) üçbucağı (1, k, n) ilə əvəz etmək daha sərfəlidir, harada k > x. Bu səbəblə, optimal seçim x = n - 1 olacaqdır. Minimum çəki üçbucaqların bütün diaqonallarını 1-ci zirvədən çəkməklə əldə edilir.
1-dəki bütün üçbucaqların ümumi çəkisi belədir:
Misal
Birinci testdə, zirvələri olan üçbucaq verilmişdir. Onun çəkisi 1 \cdot 2 \cdot 3 = 6-yə bərabərdir.
İkinci testdə, zirvələri 1, 2, 3, 4 olan kvadrat verilmişdir. Minimum çəki diaqonallı üçbucaqlamada əldə edilir:
Alqoritmin Reallaşdırılması
Giriş məlumatlarını oxuyuruq.
scanf("%d", &n);Cavabı hesablayırıq.
res = 0;
for (i = 2; i < n; i++)
res += 1ll * i * (i + 1);Cavabı çıxışa yazırıq.
printf("%lld\n", res);