198092025-12-24 00:02:04mzperxKét ajándékpython3Hibás válasz 30/10037ms9104 KiB
def parkereses(N: int, E):
    olcso=0
    draga=0
    osszeg=0
    globalMax=100000000+1
    while True:
        #maximum
        max=0
        maxPos=0
        # a következő ciklus megkeresi az eddig érintett elemek közül a legnagyobbat.
        # a globalmax szerepét nem sejtem, értem - még.
        for i in range(0, N):
            if E[i]<globalMax and E[i]>=max:
                max=E[i]
                maxPos=i
        # itt már megvan a max, mint a legnagyobb a teljes listában és a pozíciója
        # elgondolkodtam, hogy kaphatok-e más eredményt egy ismételt végrehajtás során
        # aztán rájöttem, hogy a korábban talált max értéknél kisebbek közül keresi a legnagyobbat
        # kérdés, hogy vajon az egyenlő nagyok közül melyiket találja meg 
        # - válasz: az E[i]>= miatt az utolsót
        if max>0:
            # az alábbinak az a szerepe, hogy ha olyan maximumot találtunk, 
            # amely kisebb az eddig meghatározott összeg felénél, akkor nem kell vele foglalkoznunk,
            # mert nem tudunk hozzá jó párt találni, ezért van a break
            if max<osszeg/2:
                break
            #párkeresés
            max2=0
            maxPos2=0
            # a következő ciklus keresi a legnagyobbat az elejéről
            # ugyanaz az algoritmus csak a globalMax helyét a max veszi át 
            for i in range(0, maxPos):
                if E[i]>max2 and E[i]<max:
                    max2=E[i]
                    maxPos2=i
        # ha valamelyik maximum 0, akkor nyilván nem találtunk, nem kell vele foglalkozni,
        # az olcso, draga értékét nem változtatjuk meg, ez a while cikluson kívül fontos lesz. 
        if max==0 or max2==0:
            break
        # ha a megtalált maximumok összege magasabb az eddigi összegnél, akkor megőrizzük a pozíciókat
        if max+max2>osszeg:
            osszeg=max+max2
            olcso=maxPos2
            draga=maxPos
        # azért állítjuk be a globalMax-ot, hogy a max-nál kisebb értéket keressünk a következő "körben"
        globalMax=max
    # az alábbi elágazásban elég lenne a drága pozícióját vizsgálni, mert az olcsóé lehetne 0
    if olcso==0 and draga==0:
        return 0, 0
    return olcso+1, draga+1

def futtatas():
    N=int(input())
    E=list(map(int,input().split()))
    a, b=parkereses(N, E)
    print(a, b)

#test()
futtatas()
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva17ms3124 KiB
2Elfogadva37ms7216 KiB
subtask210/10
3Elfogadva16ms3124 KiB
4Elfogadva16ms3104 KiB
5Elfogadva16ms2980 KiB
6Elfogadva17ms3176 KiB
7Elfogadva17ms2952 KiB
subtask310/10
8Elfogadva16ms3268 KiB
9Elfogadva16ms3392 KiB
10Elfogadva16ms3164 KiB
11Elfogadva16ms3124 KiB
12Elfogadva16ms3124 KiB
subtask40/20
13Hibás válasz17ms3124 KiB
14Elfogadva16ms3232 KiB
15Hibás válasz17ms3124 KiB
16Elfogadva16ms3144 KiB
17Elfogadva17ms3116 KiB
18Hibás válasz17ms3128 KiB
19Elfogadva17ms3308 KiB
20Elfogadva16ms3120 KiB
21Elfogadva16ms3208 KiB
22Elfogadva17ms3048 KiB
subtask510/10
23Elfogadva17ms3380 KiB
24Elfogadva18ms3324 KiB
25Elfogadva18ms3824 KiB
26Elfogadva18ms3636 KiB
27Elfogadva19ms3760 KiB
subtask60/10
28Hibás válasz19ms4316 KiB
29Hibás válasz19ms4128 KiB
30Hibás válasz19ms4128 KiB
31Hibás válasz19ms4312 KiB
32Hibás válasz18ms4136 KiB
subtask70/10
33Hibás válasz28ms6328 KiB
34Hibás válasz28ms6472 KiB
35Hibás válasz26ms6448 KiB
36Hibás válasz27ms6300 KiB
37Hibás válasz28ms6332 KiB
subtask80/30
38Hibás válasz32ms7568 KiB
39Hibás válasz32ms7792 KiB
40Hibás válasz34ms7692 KiB
41Hibás válasz34ms8284 KiB
42Hibás válasz32ms8352 KiB
43Hibás válasz35ms8916 KiB
44Hibás válasz37ms9104 KiB
45Hibás válasz37ms8916 KiB
46Hibás válasz35ms8916 KiB
47Hibás válasz35ms8916 KiB
48Hibás válasz35ms8916 KiB
49Hibás válasz35ms9056 KiB
50Hibás válasz35ms8916 KiB
51Hibás válasz35ms8936 KiB
52Hibás válasz37ms9012 KiB