Editorial for Ice Cream Boxes


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

English

To get most number of flavors of different types we should find the number that divides the most numbers in the array without remaining. Because in this way we can use ice cream boxes without any remaining and properly. We must factor all the elements in the given array and store the multipliers in a multiplier array. For every number in the multipliers array we can use a map, dictionary etc. to store their number of occurence. Every indices are the multipliers and their values are the number of occurence in the multipliers array. We first set their values to 0, and each time seeing them in the multipliers we can increase their number by one. After that step we can look at the values of the each indices and the biggest value means the indices of that number occurs most in the multipliers array. It is the answer that we can use this box so that put most type of ice cream in it. If there is more than possible answer we should print the smallest one, so we can sort the array first and after that we can factor the elements and go on.

Türkçe

En çok çeşitte dondurma alabilmek için en çok çeşidi tam ve kalansız sığdırabileceğimiz bir kutu seçmemiz gerekiyor. Bunun için verilen arraydeki ağırlıkların tam bölenlerini bulup çarpan arrayine ekleyebiliriz. Bu çarpan arrayinde en çok tekrar eden çarpan en çok sayıyı bölmüş demektir. Bize en çok tekrar eden sayı gerekiyor. Bunun için her indexi bir çarpan olarak tutacağımız bir map, dictionary vs. tutabiliriz. İlk başta tüm indekslerdeki değeri 0 olarak seçeriz. Çarpan arrayinde gördüğümüz her çarpan için o çarpan indeksindeki değeri 1 artırırız. En yüksek değere sahip olan indeks en çok tekrar eden çarpan anlamına gelmektedir. Bu indeks cevabımız olacaktır. Eğer birden fazla olası cevap varsa küçüğünü bastırmamız gerekiyor. Bu yüzden ilk başta gelen arrayi küçükten büyüğe sıralamamız ve sonra işlemlere devam etmemiz gerekir.

Code

n= int(input())
lst=[int(x) for x in input().split()]
def fac(lst):
    counts={}
    ans=[]
    lst.sort()
    for t in lst:
        for i in range(2,t//2+1):
            if t%i == 0:
                ans.append(i)
        ans.append(t)
    for x in ans:
        if x not in counts:
            counts[x] = 0
        counts[x] +=1
    result= (max(counts, key= counts.get))
    return result

print(fac(lst))