Şekerler ve kutular

1’den N’ye kadar numaralandırılmış N kutunuz ve 1’den K’ya kadar numaralandırılmış K şekeriniz var:

ilk kutuya ilk şeker,
ikinci kutuya ikinci şeker,


böylece N’inci kutuya N’inci şekere kadar,
(N - 1)'inci kutuya bir sonraki şeker,
(N - 2)-inci kutuya bir sonraki şeker


ve böylece yine ilk kutuya kadar devam eder,
sonra ikinci kutuya bir sonraki şeker
… ve hiç şeker kalmayana kadar böyle devam eder.

Giriş biçimi

İlk satır, test senaryolarının sayısını gösteren T’yi içerir. T test durumunun açıklaması aşağıdaki gibidir:
Her test senaryosu, N ve K olmak üzere iki tamsayı içeren tek bir satırdan oluşur.

Çıktı biçimi

Her test senaryosu için, K’inci şekeri koyduğunuz kutunun indeksini yazdırın.

Örnek girdi

3 
5 2 
3 5 
10 27

Örnek Çıktı

2 
1 
9

Bu programa biraz uyduruk bir kod yazdım ama zaman engeline takıldı. Geliştirip atmak istiyorum. Böyle arada paylaşıyorum ki maksat paylaşım olsun, zengin fikirler, düşünceler çıkıyor böyle konulardan.

Benim kodum şu:

def sekerler(box,sayi):
    sonuc = sayi - box
    i = 1
    while sonuc>0:
        sonuc = sonuc - (box-1)
        i = -i
    if i==1:
        return box-abs(sonuc)
    else:
        return abs(sonuc)+1


T = int(input())
for i in range(T):
    N,K = map(int,input().split())
    son=sekerler(N,K)
    print(son)

Yanlış anlamadıysam bir frekans var onu kullanabiliriz. box > 1 olmak kaydıyla

def sekerler2(box, sayi):
    frekans = 2 * (box - 1)
    sayi = sayi % frekans if sayi % frekans != 0 else frekans
    if sayi < box:
        return sayi
    else:
        return 2 * box - sayi

fark_var_mi = False
for i in range(2, 360):
    for j in range(1, 360):
        # print(sekerler(i, j), sekerler2(i, j))
        if sekerler(i, j) != sekerler2(i, j):
            print(f"HATA: box: {i}; sayi: {j}")
            fark_var_mi = True
if not fark_var_mi:
    print("Hatasız tamamlandı.")
1 Beğeni

Önceki kod zaman sınırlamasına takılmıştı ama şu kod sorunsuz geçti zamanı da.

def seker(kutu,seker):
    if seker<=kutu:
        return seker
    kalan = seker - kutu
    artan = kalan%(kutu-1)
    yon = kalan//(kutu-1)
    if yon%2==0:
        return kutu-artan
    else:
        return artan+1


T = int(input())
for i in range(T):
    N,K = map(int,input().split())
    son=seker(N,K)
    print(son)

Ne zamani??​​​​​​​​​

Hackerearth sitesinde kodların zamanı da kontrol ediyor sadece doğru çözümü bulmak yetmiyor.

Zaman ve belleği de uygun kullanmak gerekiyor.

Bu soruda time limit 1 sn, bellek limiti 256k

1 Beğeni