Ho già messo a disposizione ...
Questo è qualcosa che dovrebbe essere nei commenti, ma ce n'è troppa ...
C si libera di molti elementi non necessari di grandi sistemi supportati da C ++, C # ecc. Non hai bisogno di OOP, di template ecc. per scrivere piccoli sistemi centrati sugli algoritmi.
Detto questo, il C ++ ha i suoi punti in più - se lo conosci e sai come / quando evitare l'occultamento dei dati e altri problemi di astrazione-intrusione, usalo.
C'era una volta, avrei suggerito Modula 2 (o un Pascal non standard, forse anche Ada) come alternativa a C. Ci sono alcuni vantaggi per una digitazione più rigida, alcuni svantaggi per il meno ricco insieme di operatori , yada yada. Al giorno d'oggi, il mondo ha lasciato per lo più queste lingue, quindi probabilmente non sono più opzioni reali.
Probabilmente Python ti darà una velocità di sviluppo molto più veloce, a seconda di cosa stai facendo. Ovviamente ha OOP, ma è più facile evitarlo quando non ne hai bisogno di C # o Java. I problemi sono (1) che le prestazioni in fase di esecuzione potrebbero non essere presenti se stai facendo tutte le cose di basso livello (piuttosto che usare le librerie che sono state scritte in C) e (2) ci sono momenti in cui puoi vuoi gestire la memoria tu stesso nel codice di basso livello - tenere le cose in pila piuttosto che ingombrare l'heap, non fare affidamento sulla garbage collection, ecc.
I generatori / iteratori Python sono anche uno strumento molto utile che non vedi in molte altre lingue.
Scrivere componenti critici in moduli C per l'uso in Python è un'opzione, ma sarei molto preoccupato di entrare nello sviluppo multi-lingua con i limiti di tempo di un concorso - c'è almeno il doppio dello scopo per le cose da fare sbagliato in modo disastroso.
Obiettivo CAML è un linguaggio funzionale impuro. Può fare tutto ciò che una normale lingua imperativa può fare, e ha anche alcuni trucchi molto utili dal mondo funzionale. Non ne ho molta esperienza, ma credo certamente che affermi che elimina un sacco di confusione, permettendoti di concentrarti su quello che stai facendo - supporti per la corrispondenza dei modelli che pretendono di iniziare. Ed è un linguaggio nativo che esegue fast - anche se "potrebbe volere gestire la memoria per te stesso" probabilmente si applica anche agli obiettivi CAML (e F #).
Haskell - assolutamente lo apprendi, ma non con l'obiettivo di usarlo per i concorsi con un focus sugli algoritmi forti, ma se raggiungi il punto in cui pensi che sarà una buona scelta, e hai compreso le mie critiche e le hai respinte (o le hai trovate valide ma non importanti) - non combatterle neanche.