آشنایی با CodeForces

تو این پست با cf و کانتست‌هاش آشنا می‌شید و یاد می‌گیرید چطور مسابقه بدید.

سال 2009 آقای میخاییل میرزایانوف و رفقا از دانشگاه ITMO سایت مسابقه برنامه نویسی و سیستم جاج آنلاین cf رو راه میندازند. یه سایتی که بک-اند ش خیلی قوی بوده ولی فرانت-اند ش درب و داغون. این قیافه اونموقع ش هست:

از همون موقع تا همین چند هفته پیش که تولد 10 سالگیش رو جشن گرفت، نزدیک 700 تا مسابقه برگزار و 60 میلیون کد رو جاج کرده. ولی اگر فکر کردید که حتمن ظاهر سایت تو این 10 سال عوض شده باید بگم که نه. دقیقن همون شکلی مونده. باورتون نمیشه خودتون برید ببینید. خیلی عجیبه نه؟ عجیبه ولی مهم نیست. یه اصطلاحی تو دنیای برنامه نویسی هست که میگه

If it works, don't touch anything

کانتست‌ها

  • کانتست کوتاه که بهش Codeforces round میگن، دو ساعت زمان داره و هر هفته برگزار میشه
  • کانتست آموزشی یا Educational، دو دونیم ساعت زمان داره و هر دو سه هفته برگزار میشه
  • کانتست‌های خارجی، که هر از گاهی شرکتی دانشگاهی میاد تو بستر cf برگزار میکنه و بعضن جایزه هم داره

اما همه‌ی برنامه نویس‌ها هم سطح نیستند. برای اینکه کانتست‌ها عادلانه‌تر برگزار بشه، division تعریف کردن. طبق جدول پایین، همه‌ی شرکت‌کننده ها با توجه به امتیازی rating ای که دارند به 3 دیویژن مختلف تقسیم میشند. دیو1 سخت‌ترین و دیو3 آسون‌ترین سوال‌هارو دارند.

ما بیشتر سوالات کانتست‌های دیو2 و دیو3 رو حل میکنیم و جلوتر که خیلی حرفه‌ای تر شدیم میریم سراغ دیو1. قطعن سوالات رو ترجمه هم نمیکنیم دیگه خودتون باید زحمت خوندن و فهمیدنش رو بکشید. برنامه نویسی که انگلیسی بلد نباشه همون بهتر که برنامه ننویسه. ?

چجوری مسابقه بدیم؟

وقتی تو کانتستی ثبت نام می‌کنید و موقع برگزاری واردش می‌شید، شیش هفت تا سوال جلوتونه به ترتیب آسون به سخت. از سوال اول شروع کنید تا آخر. ترجیحن یه نگاه گذرا بندازید اگر مثلن سوال اول خیلی طولانی بود سوال دوم خیلی کوتاه، اول از دومی شروع کنید. چون احتمال زیاد جفتشو تا آخر مسابقه حل می‌کنید و بهتره هرچه سریعتر سوالا حل بشند.

سوال رو که باز کردید صورت سوال و ورودی خروجی و اغلب چندتا مثال از الگوریتیمی که باید بنویسید نوشته شده. رو سوال که فکر کردید و به جواب رسیدید، سمت راست یه باکس کوچیک واسه ثبت کدتون هست. فقط سورس کد رو (بدون فایل exe یا کتابخونه‌هایی که استفاده کردید) آپلود می‌کنید و کدتون میره برای داوری یا همون جاج.

بعد چند ثانیه جاج بهتون میگه الگوریتم‌تون درست بوده یا نه. اگر درست باشه یه Accepted سبز می‌بینید که جزو فرح‌بخش ترین چیزهای روزی زمینه، و اگر درست نباشه بهتون میگه که اشکال از کجاست اینکه برنامه‌تون خروجی اشتباه داده، خطای حافظه گرفتید یا خطای محدودیت زمان. اما اگر برنامه خروجی اشتباه داده باشه طبیعتن بهتون نمی‌گه که چه ورودی‌ای رو تست کرده. باید بشینید دوباره فکر کنید روش.

هرچی بیشتر سوال حل کنید و سریعتر، امتیاز بیشتری می‌گیرید و بعد از تموم شدن کانتست، rating تون بالا یا پایین میره. همین. به همین راحتی میشه مسابقه داد. البته یه سری جزییاتی بود که توضیح ندادم مثل solution hack ها. اونا رو بعدن حال داشتم میگم.

من از پست بعدی شروع می‌کنم به حل سوالات کانتست‌ها. اگر سوالی یا مشکلی تو مسابقه دادن داشتید همین پایین بپرسید.