Competitive Programming

notion image
Competitive Programming-ը կամ օլիմպիական/մրցակցային ծրագրավորումը կարելի է ասել մի սպորտաձև է, որին մասնակցում են բազմաթիվ մարդիկ փորձելով լավագույնս հանդես գալ ծրագրավորման խնդիրներ լուծելով։ Օլիմպիական ծրագրավորումը հատկապես վերջին տարիներին շատ տարածված է դարձել։ Ամեն շաբաթ տեղի են ունենում համաշխարհային տարբեր մասշտաբների մրցույթներ, որոնց մասկանցում են հազարավոր մարդիկ։ Այս հետաքրքրության աճի հետ մեկտեղ նաև դժվարանում են խնդիրները և դառնում ավելի հետաքրքիր ծածկելով ավելի լայն թեմաներ։
 
Դպրոցականների համար ամենամեծ մրցույթը դա ինֆորմատիկայի միջազգային օլիմպիադան է (International Olympiad in Informatics - IOI), որին մասնակցում են ամբողջ աշխարհից։ Ամեն տարի ընտրվում է մեկ երկիր և մասնակիցները աշխարհի բոլոր անկյուններից հավաքվում են այդտեղ իրար հետ մասնակցելու այդ մրցույթին։ Ամեն երկիր ներկայացնում են 4 մասնակից։ Եվ այդ 4-ի մեջ լինելու համար տեղի են ունենում մարզային, հանրապետական մրցույթներ, որոնց հաջորդում է ընտրական փուլը։
notion image
 
Համալսարանական ամենամեծ մրցույթներից է ACM ICPC-ն, որը արդեն թմային մրցույթ է։ Այն տեղի է ունենում մի քանի փուլով՝ հանրապետական, տարածքային և վերջում միջազգային։ Հայաստանը պատմության ընթացքում (2021թ. տվյալներով) ունեցել է միայն երկու թիմ որոնք կարողացել են անցնել միջազգային փուլ։ Դրա համար պահանջվել է շատ երկար տարիների աշխատանք և նվիրվածություն։
notion image
 
Ընդհանուր առմամբ մրցույթները շատ հետաքրքիր են անցնում և ունեն բազմաթիվ լավ խնդիրներ որոնց լուծելը մեծ բավարարվածության զգացում է պատճառում։
 

Ի՞նչ ենք սովորելու մենք

Քանի որ մեր նպատակներից մեկը IOI-ին պատրաստվելն ու մասնակցելն է, մենք կփորձենք լավագույնս պատրաստվել նման մրցույթներին։ 2021-ին IOI-ի հանձնաժողովը որոշում կայացրեց թույլատրել միայն C++ լեզվով լուծումներ (մինչ այդ հնարավոր էր լուծումներ ուղարկել նաև JAVA-ով)։
Մենք կսկսենք C++ի հիմունքներից (որոնք գրեթե նույնն են այլ լեզուներում)։
Դրան զուգահեռ, լեզուն սովորելու համար նախատեսված վարժությունները կլինեն հիմնականում մտածել պահանջող։
Հենց հասնենք բավարար գիտելիքի, որը թույլ տա օլիմպիական խնդիրներ լուծել, սովորելու պրոցեսը հիմնականում կկազմի խնդիրների լուծումը։
Դասընթացի ընթացքում կսովորենք Dynamic programming, Graph algorithms, Geometry, Strings.
 

Ինպե՞ս ենք սովորելու նյութը

Ամբողջ նյութը լինելու է վարժությունների ու խնդիրների տեսքով օնլայն հարթակում։ Շաբաթվա ընթացքում դուք կլուծեք շատ խնդիրներ, որից հետո մենք կքննարկենք չստացված խնդիրներն ու անհասկանալի մասերը դասարանում։ Դասարանում լինելու են միայն խնդիրների քննարկումներ։
Մասնակիցները որոնք կարողացել են լուծել խնդիրները կօգնեն ուրիշներին որպեսզի բոլորը հաղթահարեն բոլոր վարժությունները։
Այսինքն դասերի ժամանակ դաս պատմել, լեկցիա, և նման բաներ ընդհանրապես չեն լինելու։ Միայն խնդիրների և ալգորիթմների քննարկում։
 

Մրցույթներ

Մի քանի շաբաթ դասերի սկսելուց հետո մենք կկազմակերպենք օնլայն դասարանական մրցույթներ։ Մրցույթների խնդիրները հասանելի կլինեն մրցույթի ավարտից հետո նույնպես, որպեսզի չլուծված/թերի խնդիրներ չմնան։
Մրցույթից հետո՝ հաջորդ պարապմունքին, կքննարկենք խնդիրների լուծումները, որպեսզի բոլորը կարողանան լուծել դրանք։
Մենք այլ պլատֆորմներից որոշներից կօգտվենք երբ նրանք մրցույթներ կազմակերպեն։