Problem Müəllifi: | Hasan Saleh (MathModel) |
Hazırlayan: | Hasan Saleh (MathModel) |
Redaktə edən: | Hasan Saleh (MathModel) |
Həll 1 (Amortizasiya Analizi)
Gəlin kod üçün sadə alqoritmi nəzərdən keçirək, bu, tam ədədi (a,b,c,d) yuxarı sərhəd ilə iterasiya etməklədir, belə ki, b \ge a+1, c \ge b+1, d \ge c+1 və onların hamısı -ə bölünmür və cəmi -dir.
Təbiidir ki, nəzəri cəhətdən bu \mathcal{O}(n^4)-dür. Bunu optimallaşdıra bilərikmi? Bəli, -ni çıxara bilərik, çünki
İndi bizdə \mathcal{O}(n^3) kod var, indi nə? Sadəcə təqdim edin, bəli, kod kifayət qədər səmərəlidir və əslində bu -dir.
Sübut:
Qeyd edin ki, (n \le 10) üçün etibarlı kvadrat yoxdur, ona görə də sadəcə çap edin.
Əks halda, (a,b,c)=(1,2,3) ilk iterasiyanı nəzərdən keçirin, (n-a-b-c) \bmod 4 \neq 0 olduğu müddətcə daha çox iterasiya etməyəcəyik, çünki bu, bütün şərtləri ödəyir, belə ki, (n-(a+b+c)) \bmod 4 \neq 0 üçün əslində tək iterasiya aparır, yəni n \bmod 4 \neq 2 tək iterasiya edəcək.
(n-(a+b+c)) \bmod 4 =0 olduqda nə baş verir? a=2,b=3,c=5-ə keçəcəksiniz və d=n-10 olacaq, d \bmod 4=2 ki, bu da etibarlıdır, beləliklə, yalnız iterasiya edəcəksiniz (çünki c=4-ü keçmişik).
Komplekslik
def solve():
n=int(input())
if(n<=10):
print(-1)
else:
for a in range(1,n):
for b in range(a+1,n):
for c in range(b+1,n):
if(len(set([a,b,c,n-(a+b+c)]))==4 and a%4!=0 and b%4!=0 and c%4!=0 and (n-(a+b+c))%4!=0 and n-a-b-c>0):
print(a,b,c,n-a-b-c)
return
for _ in range(int(input())):
solve()Komplekslik
Həll 2 (Hal İşləri) Kodun hal işlərini aparmağı qərara ala bilərsiniz, əlbəttə, halımız var:
Hal 1 : (1 \le n \le 10) :
Bu halın həlli yoxdur, ona görə də sadəcə çap edin.
Mod üzrə hal işlərinin məntiqini başa düşmək üçün Amortizasiya Analizinə baxın.
Hal 2 : n \bmod 4 \neq 2
Onlardan ən azı birinin mütləq olmalı olduğu quruluş var, bunlar:
Halları sınamaq ən çox 4^2=16 əməliyyat alacaq ki, bu da kifayət qədər sürətlidir.
def solve():
n=int(input())
a=[1,2,3,n-6]
b=[2,3,5,n-10]
c=[1,2,5,n-8]
d=[1,2,6,n-9]
v=[a,b,c,d]
for i in v:
if(min(i)>0 and len(set(i))==4 and i[3]%4!=0):
print(*i)
return
print(-1)
for _ in range(int(input())):
solve()Komplekslik .