CP vadovas yra viena vieta visiems konkurencingo programavimo mėgėjams, nes jame yra visi algoritmai ir duomenų struktūros. Taip pat kiekvienoje temoje yra pavyzdžių ir neišspręstų praktikos problemų.
Konkurencinis programavimas yra sportas, turiu omenyje pažodžiui. Imkitės bet kokios sporto šakos, apsvarstykime kriketą šiuo klausimu, pirmą kartą eikite į šikšnosparnį. Pasukite ir praleiskite, padarykite tai keletą kartų ir jūs galų gale paspausite vieną virvę. Dabar metaforiškai vertinkite programavimo konkursą kaip kriketo žaidimą. Sudarykite kodą ir pateikite, galite gauti WA (Wrong Answer).
Pakeiskite kodą ir galiausiai gausite pirmąjį AC (Priimtas / teisingas atsakymas). Leiskite man pažvelgti į akis, maždaug 20% programavimo konkurso klausimų yra paprastos paprastos anglų kalbos pavertimas jūsų mėgstamos programavimo kalbos kodu.
Eikite tiesiai į jį ir išmoksite nerašytas žaidimo taisykles, kai žaisite sunkiau ir tapsite geresni.
Ir patikėk manimi, norint pradėti, nereikia žinoti jokio „išgalvoto vardo“ algoritmo ar duomenų struktūros. Ar kada nors girdėjote apie „kulkos šūvį“, vis dėlto esate geriausias savo gatvės šikšnosparnių žaidėjas, tiesa?
Gerai, užkariaukime pirmuosius 20% programavimo problemų.
Tu turi žinoti:
Tarpinis palaikymas bet kuria programavimo kalba
Anglų! Konvertuokite angliškai i kodą!
Paimkime tokio lygio problemos pavyzdį: Siaubingas Chandu
Viskas, ką jums reikia padaryti, tai perskaityti įvesties eilutę iš STDIN ir atspausdinti tos eilutės atvirkštinę dalį į STDOUT. Pirmyn, pateikite. Ieškokite savo pirmojo AC. Norite daugiau? Mūsų praktikos skyriuje yra krovinių. Ieškokite tų, kuriuose pateikta tūkstančiai teisingų pateikimų.
Gerai, kad dabar esate pasirengęs priimti tikrą iššūkį. Tvirtai laikykitės, mes nardome giliau.
Tu turi žinoti:
1. Rūšiavimo ir paieškos algoritmai
2. Maišymas
3. Skaičių teorija
4. Gretos technika
Dar svarbiau, kad jūs turite išsiaiškinti, ką, kada ir kur juos pritaikyti. Tai pasidaro tikrai sudėtinga, todėl norėdami padėti pradedantiesiems įgyti pasitikėjimo savimi, mes rengiame daugybę konkursų kaip „Code Monk“. Prieš kiekvieną konkursą išleidžiame vadovėlį tam tikra tema, o vėliau konkurse problemos nukreipiamos tik į tą konkrečią temą. Aš rekomenduoju jums pereiti mokymus ir išspręsti po vieną ar du klausimus kiekviena tema.
Iki šiol supratote, kad klausimai suformuluoti taip, kad apgaudinėtume tai, kaip mes galvojame. Kartais, jei paprastą anglų kalbą konvertuotumėte į kodą, galėtumėte priimti TLE (laiko limitas viršytas) verdiktą. Norėdami susidoroti su laiko apribojimais, turite išmokti naujų metodų ir algoritmų rinkinio. Tam tikrais atvejais dinaminis programavimas (DP) ateina į pagalbą. Tiesą sakant, galbūt jau intuityviai naudojote šią techniką. Bet kuriame konkurse visada yra bent vienas klausimas, kurį gali išspręsti DP.
Be to, būtumėte pastebėję, kad yra klausimų, kurių tiesiog neįmanoma išspręsti naudojant linijinių matricų duomenų struktūras.
1. Grafiko teorija
2. „Disjoint Set Union“ (sąjungos radinys)
3. Minimalus besisukantis medis
Šie duomenų struktūrų rinkiniai jus pateks pakankamai toli. Be to, jūs supratote, kad tikrasis menas yra modifikuoti jums žinomus metodus, kad būtų galima išspręsti klausimą. Visus lengvo ir vidutinio lygio klausimus galima išspręsti tokiu būdu.
Jūs visi esate pasirengę užimti trumpiausių programavimo iššūkių sąrašų viršūnę, tereikia išlaikyti nuolatinį atkaklumą. Kaip jau minėjau, tai yra sportas, kurio neįvaldysi tol, kol iš tikrųjų to nepadarysi. Eik į priekį, dalyvauk trumpame konkurse, žinok savo stipriąsias ir silpnąsias puses ir pažiūrėk, kaip elgiesi adrenalino režimu, kai tiksi laikrodis.
Laikykitės savo logikos kiek įmanoma ilgiau, galiausiai sugalvosite ką nors panašaus į algoritmą, reikalingą klausimui išspręsti. Jums tereikia jį sušukuoti. Keli iš šių metodų padės išspręsti sunkiausias aplinkines problemas.
1. Segmentų medis
2. Styginių algoritmai
3. Bandymai, Sufiksų medis, Sufiksų masyvas.
4. Sunkus šviesos skilimas
5. Grafiko dažymas, tinklo srautas
6. Sqrt skilimas.
Taigi atsisiųskite šį CP vadovą ir mėgaukitės naujų dalykų mokymusi, taip pat nepamirškite jų kodavimo.