 
آشنایی با مسابقات برنامهسازی
| مدرس: کمیته علمی مسابقات برنامهسازی | گواهینامه: رسمی دوزبانه | 
| ترم: مهر و آبان ۱۴۰۳ | پیشنیاز: برنامهسازی پایتون | 
| زمان ارائه: یکشنبه و سهشنبه ۱۶:۳۰ تا ۱۸:۰۰ | محل برگزاری: کلاس مجازی | 
هدف کلی
هدف از این درس، آشنایی دانشجویان با مهارتهای برنامهسازی است که در مسابقات برنامهسازی مانند مسابقات بینالمللی رایان و ICPC مورد استفاده قرار میگیرد. فرض بر این است که دانشجویان با یکی از زبانهای برنامهسازی مانند پایتون یا سی آشنا هستند.
سرفصلها
- معرفی مسابقات برنامهسازی (۱ جلسه)- برنامه نویسی رقابتی چیست؟
- تاریخچه و مسابقات مهم برنامه سازی
- فواید برنامه نویسی رقابتی
- آشنایی با سبک سوال های مسابقات برنامه سازی
- از کجا شروع کنیم و چطور تمرین کنیم؟
 
- مقدمات دادهساختارها (۱ جلسه)- آشنایی با داده ساختارها
- لیست پیوندی
- پشته
- چند استفاده عملی از داده ساختارها برای حل مسئله
 
- پردازش رشتهها (۲ جلسه)- تکنیکهای خواندن ورودی
- ساختاریابی در متن
 
- جستجوی سریع (۲ جلسه)- جستجوی دودویی
- درخت بازه
 
- الگوریتمهای پایه گراف (۲ جلسه)- پیادهسازی گراف
- DFS و کاربردهای آن
- BFS و کاربردهای آن
- مرتبسازی توپولوژیکی
 
- کار با بیتها (۱ جلسه)- استفاده کار با بیتها
- استفاده از بیتها برای کار با زیرمجموعهها
- مسائل نمونه و اشتباهات رایج
 
- شبیهسازی (۱ جلسه)- شبیهسازی رویداد گسسته خطی
- شبیهسازی رویداد گسسته دورهای
 
- عملیاتی کردن کد (۲ جلسه)- تکنیکهای دیباگ کردن
- بهینهسازی کد
 
ارزیابی
- تمرینهای برنامهسازی هفتگی
منابع
- A. Laaksonen. Guide to Competitive Programming: Learning and Improving Algorithms Through Contests. Springer, 2020.
- S. Halim, F. Halim, and S. Effendy. Competitive Programming 4. The new lower bound of programming contests in the 2020s. Lulu, 2020.