Kezdőoldal » Számítástechnika » Programozás » C++ szöveges feladat?

C++ szöveges feladat?

Figyelt kérdés

Józsikának van "A" és "B" kupac fánkja, ezekben "n" és "m" darab fánk.

"X" perc múlva haza ér Józsika apja és mivel megenné az összeset, ezért Józsika minél több darabot meg akar enni az érkezéséig.

A fánkok különböző méretűek és Józsikának "A₁","A₂"..."Aₙ" és "B₁","B₂"..."Bₘ" percig tart megenni az egyes fánkokat.

Józsika mindig csak a kupacok tetején lévő fánkok közül választhat (nem tud tetszőleges fánkot kivenni a kupacokból) és egyszerre csak egy fánkot ehet.

Maximum hány darab fánkot tud megenni Józsika az apja érkezéséig?


Standard bemenet formátuma:


n m X

A₁,A₂...Aₙ

B₁,B₂...Bₘ


"n" és "m" 1 és 100 000 közötti integer

"X", "Aᵢ" és "Bᵢ" 1 és 10 000 000 közötti integer


A megoldást a standard kimenetre írjuk.


Például:


2 5 50

5 20

30 10 10 40 20


Megoldás: 3


Magyarázat: Két optimális megoldás van, Józsika megeszik 3 fánkot a B kupacból (30 + 10 + 10 <= 50) vagy 1-et az A kupacból és 2-t a B kupacból (5 + 30 + 10 <= 50).

Ha például megenné mindkét fánkot az A kupacból, akkor a B-ből már nem tudna megenni egyet sem (mert 5 + 20 + 30 > 50).



A input beolvasása megy ebből de nem tudom hogyan tovább :D

Először azzal próbálkoztam hogy mindig a legkisebb értéket választom de ez nem jó megoldás mert előfordulhat, hogy a nagyobb értéket kell választani a kisebb végső összeg érdekében.



2020. jún. 30. 10:18
1 2
 1/15 A kérdező kommentje:

A standard bemenet formátumot rosszul írtam (nincsenek vesszők benne) de a példából látszik a jó formátum.


n m X

A₁ A₂ ... Aₙ

B₁ B₂ ... Bₘ


De végülis mindegy is mert nem a beolvasással van problémám.

2020. jún. 30. 11:03
 2/15 anonim ***** válasza:
0%
Én egy fát építenék, ahol a csomópontok fánkok méretei (idejei), és olyan csomópontot kell találni, ahol az odavezető út költsége <=X, és az odavezető út legtöbb csomópontot érinti. (Egy fánk több helyen is megjelenhet a fában.) Innentől fa bejárás probléma, ld. például "Visszalépéses keresés".
2020. jún. 30. 12:30
Hasznos számodra ez a válasz?
 3/15 anonim ***** válasza:
19%

** "ld. például "Visszalépéses keresés""

Illetve annyi könnyebbség van, hogy nem kell minden csomópontot végigjárni, mert már az odavezető úton is eldől, érdemes-e tovább vizsgálni azt az ágat, pl. már félúton rosszabb, mint az eddigi legjobb.

2020. jún. 30. 12:42
Hasznos számodra ez a válasz?
 4/15 anonim ***** válasza:
20%
..Sőt, elég két stack, amin egy rekurzív függvény dolgozik, mintha egy fában csinálna visszalépéses keresést.
2020. jún. 30. 12:47
Hasznos számodra ez a válasz?
 5/15 anonim ***** válasza:
20%

Nem hiszem, hogy kvantumszámítógépe van a kérdezőnek, amivel százezres nagyságrendnél backtrackingelhet (de ha mégis, akkor is felesleges exponenciális megoldást alkalmazni, ha van lineáris is).


Számolsz 2 prefix sumot a kupacokból, elindulsz 2 pointerrel az egyik elejéről, a másik végéről és ahol a párok összege nem nagyobb, mint x, az a pont potenciális megoldás, ezek közül kell az, ahol a fánkok száma a legnagyobb.

2020. jún. 30. 13:23
Hasznos számodra ez a válasz?
 6/15 anonim ***** válasza:
63%

#5, A kérdező példájával levezetnéd ezt röviden, kérlek?

Tehát pl.

5 20 / 30 10 10 40 20 (bemenet)

5 25 / 30 40 50 90 110 (prefix sums)

...

2020. jún. 30. 13:50
Hasznos számodra ez a válasz?
 7/15 anonim ***** válasza:
27%

Célszerű 0-val kezdeni a sumot. Állsz A elején, B végén, ha az összeg nagyobb X-nél, akkor rossz megoldás -> feljebb lépsz B-ben, ha nem nagyobb, akkor jó megoldás -> lejjebb lépsz A-ban.

Elég triviális, nem tudom mit kéne még levezetni rajta.

2020. jún. 30. 14:33
Hasznos számodra ez a válasz?
 8/15 anonim ***** válasza:
63%

A lekezelő stílusod nem sokat segített, de amúgy kezdem érteni, mire akarsz kilyukadni. A gond az, hogy mennyivel jobb, ha egy százezres nagyságrendű lista végéről indulsz visszafelé? Egyébként kb. ugyanazt írtad, amit én, csak én nem megyek végig a teljes listán. Egyébként annyira nem bonyolult az a fa, nem is kell végig bejárni, és szerintem kevesebb lépésben ad eredményt.

De részemről ennyi, majd a kérdező eldönti, hogy csinálja.

2020. jún. 30. 14:46
Hasznos számodra ez a válasz?
 9/15 anonim ***** válasza:
27%
Tehát jól értem, szerinted kevesebb lépésben ad eredmény egy backtrack exponenciális komplexitással, mint egy O(n + m) megoldás?
2020. jún. 30. 14:57
Hasznos számodra ez a válasz?
 10/15 anonim ***** válasza:
27%
Kb. 5 perc implementálni amúgy őket, én abban is benne vagyok, hogy implementálom a saját megoldásomat (egy általad választott nyelven akár, hogy ne különböző nyelveken írjuk), te pedig a tiedet és megnézzük, hogy melyik mennyi idő alatt fut le ugyanazon a 100000-es teszt eseten.
2020. jún. 30. 15:16
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!