Per un principiante di ACM-ICPC, come dovrei iniziare?
La maggior parte delle risposte qui indicano i luoghi dove si possono risolvere i problemi. Io descriverò un approccio ai concorsi di programmazione ACM che è un po' diverso. La mia definizione di un principiante ACM è qualcuno che non ha mai fatto un concorso regionale ACM prima d'ora e non ha essenzialmente alcuna esperienza di programmazione competitiva, quindi cercherò di coprire più dettagli dall'iniziare a lavorare sui problemi ACM al competere in un concorso regionale.
Prima di tutto, mettetevi a vostro agio con uno tra C++ e Java. Puoi usare C, C++ o Java - usare C è più probabile che ti ostacoli a lungo termine, quindi familiarizza con uno degli altri due linguaggi. Dovresti essere abbastanza a tuo agio con il linguaggio da poter fare alcune cose semplici. In particolare, dovreste essere a vostro agio con quanto segue:
- Lettura di dati da input standard (la console), o da un file. Dovete imparare a farlo, dato che è così che si interagisce con il programma.
- Operazioni aritmetiche di base con i numeri interi e i numeri reali.
- Operazioni di base con le stringhe, come estrarre una sottostringa o invertire interamente la stringa.
- Array, iterare su un array, aggiornare gli elementi di un array.
Con l'aumentare dell'esperienza, potrete imparare strutture dati più avanzate. Vettore, coda prioritaria, mappa e set sono alcune di queste.
Una volta che ti sentirai a tuo agio con il linguaggio di programmazione che hai scelto, dovresti iniziare a lavorare su alcuni semplici problemi. È stato fornito un discreto numero di risorse. Metterò in evidenza Codeforces (può essere trovato su Codeforces).
Questo è il sito che raccomando a tutti i miei amici che vogliono un posto dove praticare la programmazione, sia la programmazione competitiva che quella casuale. Ci sono un paio di ragioni per cui questo sito è davvero bello:
Per prima cosa, i problemi sono tutti di alta qualità, e il numero di volte che un problema è stato risolto è un buon segnale di quanto sia facile il problema. Su altri siti (mi viene in mente il Peking Online Judge trovato su Welcome To PKU JudgeOnline), il numero di soluzioni è un segnale molto debole di quanto sia facile un problema.
Inoltre, una cosa veramente bella di questo giudice online che manca alla maggior parte degli altri giudici è la possibilità di vedere su quale caso di prova si fallisce. All'inizio della vostra esperienza di programmazione ACM, farete alcuni bug che non avete mai visto prima, ed essere in grado di guardare il test case su cui avete fallito può aiutare molto se siete bloccati cercando di capire perché il vostro programma non funziona. Detto questo, otterrete molto di più dal debugging di un problema senza guardare il test case, perché questo è precisamente ciò che farete in una gara. Se siete bloccati nel debugging per più di un'ora o giù di lì, date un'occhiata al test case e vedete perché il vostro programma non funziona.
Il vostro prossimo lavoro sarà probabilmente quello di qualificarvi per rappresentare la vostra università in un concorso regionale. Per fare questo, continuate a fare pratica nel risolvere i problemi. Puoi usare altri giudici online per ulteriore pratica - guarda le altre risposte per altri buoni giudici online.
Da qui, presumo che tu sia sulla strada per le regionali.
Se non l'hai già visto, comprendi lo schema di punteggio ACM-ICPC. In particolare, rendetevi conto che avere molti invii sbagliati non è auspicabile. Vale sempre la pena di scrivere il codice più lentamente e di testarlo accuratamente prima di inviarlo per evitare di avere più invii sbagliati. In una gara vera e propria, niente è un killer del morale così efficace come non vedere il verdetto accettato per un programma che hai appena presentato.
Puoi anche cercare di imparare la psicologia del tabellone e fare un po' di ricerche su altre squadre nella tua regione. Se una squadra ha risolto un problema, significa che il problema è risolvibile. Ignorate le risposte sbagliate ad altri problemi. Se una squadra particolarmente forte nella tua regione risolve un problema, questo potrebbe non essere un buon segno che tu possa farlo, ma se molte squadre iniziano a risolvere un problema che tu non hai risolto, dovresti sicuramente guardare quel problema.
Una volta che sei più abituato a risolvere i problemi del concorso, inizia a lavorare con una squadra. I concorsi ACM sono intrinsecamente concorsi di squadra, e anche se non sei necessariamente la persona più forte della tua squadra, puoi comunque dare il tuo contributo (riferimento spudorato a Nick Wu'risposta a Com'è partecipare ai concorsi ACM-ICPC, sapendo che sei il membro più debole della tua squadra e che i tuoi compagni stanno facendo tutto il lavoro per te? Vi sentite imbarazzati? Come fai a gestirlo?). Quando iniziate a prepararvi per le regionali, scegliete presto la vostra squadra e fate qualche gara virtuale con loro. Potresti voler fare le regionali degli anni precedenti della tua regione. Fate i regionali di altre regioni (a patto che la difficoltà sia paragonabile - per dirla semplicemente, la maggior parte dei regionali in Nord America sono facili, per i regionali più difficili, andate a cercare in Europa o in Asia. Il Northeastern European Regional Contest (NEERC) è comunemente considerato il concorso regionale più difficile del mondo).
Nella tua squadra, cerca di capire il tuo ruolo tra i membri della squadra. Sei più bravo a proporre soluzioni o sei più bravo/veloce a codificare? Ogni persona dovrebbe dare il contributo che meglio corrisponde ai suoi punti di forza. Per esempio, nella mia squadra, io sono la persona che viene assegnata alla codifica di problemi particolarmente pesanti per l'implementazione. Uno dei miei compagni di squadra ha competenze matematiche più forti, quindi si concentra sulla risoluzione di problemi più matematici. Avere una buona sinergia può essere utile, quindi sviluppatela prima e non durante un concorso vero e proprio.
Il giorno del concorso, non stressatevi. È molto facile farsi prendere dallo stress. Inizia lentamente, e ricorda tutto quello che hai imparato. Godetevi quelle 5 ore, perché quelle 5 ore sono alcune delle ore più esaltanti che potrete mai vivere.
Hai appena completato il tuo primo concorso regionale! Forse è finita male, e avevi un programma con dei bug che non riuscivi a risolvere. Forse è finita bene, e hai appena risolto quel problema nei secondi finali del concorso. In ogni caso, aspettate con ansia i risultati e incrociate le dita per andare alle finali mondiali. Anche se non ci andrai, non prendertela troppo. Il mondo non finirà solo perché non andrete alle finali mondiali. Andate a fare qualcosa di divertente!
Articoli simili
- Come inviare posta in Gmail dal mio indirizzo @acm.org
- Voglio iniziare a praticare il tiro con l'arco ma non ho mai tenuto un arco in vita mia. Che tipo di arco è il migliore per un principiante?
- Quali sono alcuni buoni progetti/idee nello sviluppo web con cui un principiante può iniziare per portare le sue abilità al livello successivo?
- Come iniziare da principiante in applicazioni web
- Come iniziare a migliorare nella corsa ed essere in grado di andare più a lungo e più velocemente? A quanti minuti/km dovrei mirare per iniziare