کد فورسس چیست و آموزش ثبت نام در آن

کدفورسس
کدفورسس

کد فورسس چیست؟

کدفورسس یا codeforces یا به اختصار cf یک سایت برنامه نویسی رقابتی و جاج آنلاین است که در سال ۲۰۰۹ توسط آقای میخاییل میرزایانوف و رفقا از دانشگاه ITMO طراحی شد. یک سایت با بک-اند خیلی قوی و فرانت-اند خیلی ساده.

با اینکه تا الان بیش از ۱۰ سال از تولد این سایت میگذره اما ظاهر اون دست نخورده. شاید هم از قاعده if it works, don't touch anything پیروی میکند.

در سال ۲۰۱۳ این سایت مدعی شد که با بیش از ۶۰۰ هزار کاربر فعال از سایت topcoder پیشی گرفته است. این سایت توسط برنامه‌نویسان برتر رقابتی همچون Gennady Korotkevich و Petr Mitrichev مورد استفاده قرار می‌گیرد.

Petr Mitrichev (left) and Gennady Korotkevich (right), two prominent competitive programmers during a contest.
Petr Mitrichev (left) and Gennady Korotkevich (right), two prominent competitive programmers during a contest.


کانتست ها (مسابقات)

  • کانتست کوتاه که یهش میگن codeforces round، هر هفته به مدت دو ساعت برگذار میشه.
  • کانتست آموزشی یا Educational، با طول زمان ۲ تا ۲.۵ ساعت به همراه ۱۲ ساعت دوره‌ی هک دو تا سه بار در ماه برگزار میشود.
  • کانتست های خارجی نیز وجود دارند که از طرف شرکت‌ها و یا دانشگاه‌ها در بستر کد فورسس هستند و برخی دارای جایزه می‌باشند.

اما همه برنامه‌نویس‌ها هم سطح نیستند. برای این که کانتست‌ها عادلانه برگزار بشه division تعریف کردن. طبق جدول پایین همه شرکت کننده‌ها با توجه به امتیاز (rating) ای که دارند مشابه سیستم ELO به ۳ دیویژن مختلف تقسیم میشن. div-1 سخت ترین و div-2 آسون ترین سوالات رو دارن:

rating
rating

برخی دیگر از کاربردهای این سایت:

  • حل سوالات مسابقات قبلی (بانک سوالات) برای اهداف آموزشی
  • استفاده از فیچر (قابلیت) Polygon برای ساخت و تست problem ها (همان سوالات یا به اصطلاح مشکلات)
  • شبکه سازی و ایجاد ارتباط با دیگران با کمک بلاگ داخلی کدفورسس

نکات تکمیلی

این سایت توسط بسیاری از دانشگاه‌های جهان برای درک بهتر انواع الگوریتم‌ها توصیه می‌شود. همچنین این سایت هنوز در حال توسعه است.


آموزش ثبت نام در سایت

ابتدا وارد سایت codeforces.com شوید. سپس Register را بزنید.

صفحه اول
صفحه اول

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

شاید کمک کند: آموزش ساخت جیمیل + | آموزش انتخاب رمز ایمن +

سپس دکمه Register را میزنیم.

همچنین می‌توانستیم از پایین همین فرم گزینه Use Gmail را میزدیم و با استفاده از حساب گوگل خود اقدام به پر کردن فرم می‌کردیم.

وارد کردن ایمیل
وارد کردن ایمیل

در نهایت یک ایمیل ارسال می‌شود که باید وارد لینک مربوطه شوید تا ایمیل‌تان تایید شود. (ممکن است ایمیل ارسالی در پوشه اسپم شما یا لیبل تبلیغات هم باشد.)

تایید ایمیل
تایید ایمیل
ایمیل ارسالی - لینک تایید اولین لینک است.
ایمیل ارسالی - لینک تایید اولین لینک است.

با زدن روی فرم به داشبورد خود در کدفورسس وارد می‌شوید و عملا ثبت نام تمام شده است.

داشبورد
داشبورد

در این صفحه تب‌های زیادی وجود دارد که در ادامه به توضیحات آن‌ها خواهیم پرداخت.

آموزش به اشتراک گذاری صفحه پروفایل در کدفورسس

برای این کار با توجه به نام‌کاربری یا همان یوزرنیمی که برای خود انتخاب کردیم لینک زیر را تکمیل می‌کنیم. برای این کار به جای [USERNAME] یوزرنیم خود را وارد میکنیم:

https://codeforces.com/profile/[USERNAME]

برای دیدن صفحه کدفورسس من از این لینک + استفاده کنید.


آموزش سایت

ابتدا به بررسی نوار اصلی سایت می‌پردازیم. با این نوار به جاهای مختلف سایت می‌رویم.

نوار اصلی سایت
نوار اصلی سایت

صفحه HOME: در این صفحه پست‌های حمایت شده codeforces و اعلان‌های رسمی قرار دارند. همچنین گهگاهی ویژگی‌های جدید بروزرسانی‌ها نمایش داده می‌شوند. در این صفحه وبلاگ‌های اعلان مسابقه‌هم اطلاعاتی همچون نویسنده و زمان مسابقه و مدت برگزاری و . . . هم قرار دارد.

صفحه home
صفحه home

صفحه HELP: در این صفحه قوانین و تقسیم بندی ها و سیستم کلی کدفورسس تشریح شده و به بسیاری از سوالات پاسخ داده شده است.

help
help

صفحه TOP: این صفحه شامل محبوب‌ترین وبلاگ‌ها و نظرات می‌باشد. با کلیک در نوار فرعی آن می‌توانید در این دو صفحه جابه‌جا شوید.

top
top

صفحه CATALOG: این یک صفحه مبتنی بر جامعه است که حاوی وبلاگ‌های نوشته شده توسط انجمن‌ها است که بر اساس موضوعات مرتب شده‌اند.

catalog
catalog

صفحه CONTESTS: در این صفحه که شاید مهم‌ترین صفحه کدفورسس باشد می‌توانید تمام مسابقات برنامه ریزی شده را که بر اساس تاریخ مرتب شده پیدا کنید. این مسابقات شامل اطلاعات کوتاهی همانند عنوان آنها و نویسندگان و زمان شروع و مدت مسابقه است. می‌توانید با استفاده از دکمه Register که چند روز قبل از مسابقه ظاهر می‌شود اقدام به ثبت نام در مسابقه بکنید. شما نمی‌توانید بدون ثبت نام در مسابقه شرکت کنید و اگر ثبت نام کنید و چیزی ارسال نکنید هم امتیازی به شما بابت مسابقه اضافه نمی‌شود.

contests
contests

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

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

در بالا چند تب مختلف را در این صفحه نمایش داده‌ام. یکی از گزینه ها برای ما در همان صفحه PROBLEMS گزینه Ask a question می‌باشد. می‌توانید در مورد مشکلات خاصی که در درک بخشی از بیانیه دارید توضیح بخواهید. از این دکمه برای درخواست کمک برای رفع اشکال کد یا درخواست راه‌حل یا درخواست‌های نامربوط استفاده نکنید.

صفحه GYM: در این صفحه مجموعه وسیعی از gym ها را داریم. همچنین با زد بر روی هر مسابقه اطلاعات مفیدی در باره آن به شما نمایش داده می‌شود. همه این مسابقات نوشته شده توسط انجمن‌ها هستند و در رتبه بندی و rating محاسبه نمیشود.

gym
gym

صفحه PROBLEMSET: در این صفحه در نوار آن می‌توانید به بخش‌های مختلف این صفحه بروید. این سوالات بر اساس شماره شناسه آن‌ها مرتب شده اند. بنابراین سوالاتی که به تازگی منتشر شده اند در بالای صفحه قراردارند. در جدول برای هر مشکل یک شناسه و نام و تعدادی برچسب هست. در کنار این‌ها گزینه‌های ارسال و ستاره نیز وجود دارند. با زدن گزینه ارسال که به شکل هواپیمای کاغذی می‌باشد شما به صفحه ارسال کد هدایت می‌شوید. با کلیک بر روی ستاره هم سوال را به موارد دلخواه اضافه می‌کنید. در ادامه هم درجه سختی سوال را داریم که از 800 تا 3500 داریم و همینطور تعداد افرادی که آن سوال را پاسخ داده اند. میتوان با زدن بر روی علامت رعد و برق یا تیک سبز آنها را بر اساس درجه سختی یا تعداد افرادی که حل کرده‌اند مرتب کرد. (یک بار کلیک نزولی و بار دیگر صعودی)

PROBLEMSET
PROBLEMSET

چگونه سوالات را حل کنیم؟

هنگامی که مشکلی را انتخاب می‌کنیم مشخصات آن از جمله عنوان و موقعیت آن در مسابقه و محدودیت زمانی و محدودیت حافظه و فرمت ورودی و خروجی و نمونه‌ها و یادداشت‌های مشکل را داریم.

محدودیت زمانی چیست؟

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

محدودیت حافظه چیست؟

محدودیت حافظه بیشترین مقدار حافظه است که برنامه شما می‌تواند مصرف کند. در صورتی که حافظه مصرفی شما بیشتر باشد جواب مردود است.

نتایج (احکام)

  • نتیجه Accepted: به این معنی است که راه حل شما تمام تست های داده شده را با موفقیت پشت سر گذاشته است.
  • نتیجه Pretests passed: به این معنی است که راه حل‌های زیر مجموعه‌ای از تست‌ها در طول مسابقه گذرانده شده و ممکن است درست نباشد اما به احتمال زیاد درست است. پیش آزمون‌ها وجود دارند زیرا اجرای همه راه‌حل‌ها در تمام تست‌ها در طول مسابقه برای سرورها بسیار سخت است.
  • نتیجه Runtime error: خطای زمان اجرا - به این معنی است که راه حل دارای خطایی است که هنگام اجرای برنامه رخ می‌دهد. همچنین خطاهایی می‌تواند با تقسیم بر صفر، دسترسی به اندیس غیر مجاز یک آرایه و بسیاری دیگر از موارد ایجاد می‌شود.
  • نتیجه Wrong answer: به این معنی است که راه حل شما پاسخی را ارائه می‌دهد که با پاسخ مورد نظر متفاوت است یا برخی از محدودیت‌های ارائه شده در بیان مسئله را برآورده نمی‌کند.
  • نتیجه Time limit exceeded: به این معنی است که اجرای راه حل شما بیشتر از محدودیت زمانی طول می‌کشد.
  • نتیجه Memory limit exceeded: به این معنی است که راه حل شما بیشتر از محدودیت مشخص شده حافظه مصرف می‌کند.
  • نتیجه Compilation error: به این معنی است که کد شما کامپایل نشد. برخی از دلایل می‌تواند این باشد که از نحوه اشتباهی استفاده کرده‌اید یا با زبان اشتباهی سابمیت کردید.
  • نتیجه Hacked: به این معنی است که راه حل شما تمام تست‌ها را گذرانده اما توسط کاربر دیگری در مرحله هک هک شده است. (که از مسابقه‌ای به مسابقه دیگر متفاوت است.)
  • نتیجه Idleness limit exceeded: زمانی رخ می‌دهد که برنامه شما مدتی طولانی را بیکار بماند. (در انتظار کاربر / برنامه تعاملی)

برچسب‌های مشکل چیست؟

برچسب‌های مسائل موضوعات/الگوریتم‌هایی هستند که می‌توان از آنها برای حل مسئله استفاده کرد. اگر برچسب خاصی وجود داشته باشد به این معنی نیست که راه حل باید با آن راه حل مرتبط باشد. اما راه حلی با استفاده از آن موضوع خاص وجود داردو برچسب‌ها ممکن است توسط اعضای انجمنی که به رتبه 1900 یا بالاتر دست یافته اند قرار دهند.

در صورت تمرین می‌توانید تعیین کنید که آیا می‌خواهید برچسب ها را ببینید یا خیر. فقط کافیست روی کادر show tags در سمت راست صفحه PROBLEMSET کلیک کنید. در آنجا می‌توانید مشکلات حل شده را نیز پنهان کنید.

صفحه GROUPS: صفحه گروه‌ها به شما این امکان را می‌دهد گروه‌هایی را که در آنها عضو هستید ببینید. شما همچنین می‌توانید تمام گروه‌های موجود را لیست کنید و گروه خود را ایجاد کنید. برای هر گروه شما نقش متفاوتی دارید. participant و Manager و Creator انواع نقش ها در گروه می‌باشد. هر نقش به موارد مختلفی دسترسی دارد که مهمترین آنها نقش creator یا سازنده گروه است. پیوستن به برخی گروه‌ها مستلزم آن است که مدیرگروه (manager) یا سازنده درخواست شما را بپذیرد. هنگامی که یک گروه خصوصی باشد از شما خواسته میشود تا خط مشی ثبت نام را مشخص کنید که بر اساس آن اعضا می‌توانند به گروه بپیوندند.

صفحه groups
صفحه groups

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

جهانی
جهانی
ایران
ایران

صفحه EDU: در این صفحه لیستی از دوره‌هایی است که توسط کدفورسس و . . . ارائه داده شده است. شما می‌توانید در این دوره‌ها شرکت کنید. معمولا دوره ها شامل بخش تئوری و عملی است. بخش تئوری معمولا شامل یک ویدیو است که حاوی توضیح کوتاه اما مختصر درباره موضوع است. بخش تمرین هم معمولا شامل برخی مسائل است که در آنها می‌توانید الگوریتم و دانشی را که در تکمیل نظریه به درست آورده‌اید اعمال کنید. این دوره همچنین شامل یک بخش نظرات است که میتوانید نظرات خود را درباره دوره به اشتراک بگذارید یا در آن مورد سوال بپرسید.

صفحه CALENDAR: در این صفحه به طور فشرده زمان مسابقات را داریم.

صفحه API: در این صفحه کدفورسس به شما یک API ارائه می‌کند. شما می‌توانید با کلیدهای POST و GET رابط API خود را مدل کنید. این صفحه شامل تمام اطلاعاتی است که هنگام ساخت یک API از این سایت نیاز داریم قرار دارد. این روش نسبت به روش‌های قدیمی بهتر است.

صفحه Profile: همانطور که در تصویر نشان داده شده است در سمت راست صفحه می‌توانید با کلیک روی تصویر یا نام خود وارد صفحه پروفایل شوید.

فعالیت بازیکن و Rating آن در یک نمودار و یک جدول نشان داده شده است.

چگونه به مسابقات دسترسی داشته باشیم؟

در صفحه CONTESTS مستقیما به مسابقات دسترسی پیدا می‌کنید اما همچنین می‌توانید با زدن Enter در سمت راست سایت هم به مسابقه وارد شوید.

چگونه به موارد ارسالی خود دسترسی داشته باشم؟

ابتدا باید وارد پروفایل خود شوید و سپس تب submission را انتخاب کنید.

در این صفحه ارسال‌ها و وضعیتشان به ترتیب زمان کاهش می‌یابد (آخرین ارسال بالاترین) همچنین می‌توانید موارد ارسالی را بر اساس نوع نتیجه یا زبان برنامه نویسی و مسابقات فیلتر کنید.

چگونه می‌توان مطالب ارسالی دیگران را در مورد یک مشکل خاص مشاهده کرد؟

برای اینکار باید به صفحه مسابقه مشکل بروید و از این صفحه status را انتخاب کنید.

در اینجا تمامی ارسال ها برای این مسابقه وجود دارند. شما می‌توانید با استفاده از فیلتر کردن (مثلا تنها سوال یک و موارد accept شده) با زدن روی شناسه ارسال (در ستونی که بالای آن # قرار دارد) جوابی که Accept شده را ببینید.

چگونه می‌توان مطالب ارسالی خود را در مورد یک مشکل خاص مشاهده کرد؟

راه‌های مختلفی برای اینکار وجود دارد. اگر در صفحه مشکل هستید میتوانید به سمت راست پایین صفحه که در آن آخرین ارسال‌های مشکل وجود دارد را نگاه کنید. برای مشاهده آن کافی است که روی شناسه ارسالی که در ستون اول جدول است کلیک کنید.

راه دیگر رفتن به صفحه مسابقه است و همانطور که به سوال چگونه ارسال‌های دیگران را مشاهده کنیم پاسخ دادیم اینبار روی دکمه My submissions کلیک می‌کنیم.

دوستی در کد فورسس

با رفتن به پروفایل یک نفر و زدن ستاره نزدیک نام او این شخص را دوست معرفی می‌کنید. اساسا به این معنی است که شما اکنون فعالیت این شخص را دنبال می‌کنید. بنابراین با مشاهده وضعیت و انتخاب گزینه friends only فقط موارد ارسالی کسانی را که دنبال می‌کنید مشاهده خواهید کرد. در مورد رتبه بندی در یک مسابقه در قسمت about contest هم همینطور است.

دوستی در کدفورسس یک رابطه یک‌طرفه است و غیرممکن است که ببینید چه کسی با شما دوست شده است.

مشارکت یا Contribution چیست؟

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

درباره BLOGS

هر کسی می‌تواند در کدفورسس وبلاگ بنویسد. اگر پستی را دوست دارید می‌توانید با کلیک کردن روی مثلث سبز به آن رای مثبت دهید یا با زدن مثلث قرمز به آن رای منفی دهید.

درباره Comments

هر وبلاگ زیر خود نظراتی دارد. هر کسی می‌تواند در وبلاگ‌های شخص نظر دهد. مانند وبلاگ‌ها، می‌توانید به نظرات هم رای مثبت یا منفی دهید. همچنین می‌توانید نظرات خود را ویرایش کنید هر چند که با زدن دکمه rev ویرایش‌های قبلی برای دیگران قابل دسترس خواهد بود.

ارزش upvote یا رای موافق

رای‌های موافق مختلف میزان متفاوتی از رای‌های موافق را به همراه دارند. بنابراین در حالی که برای یک مبتدی (newbie's) این رای به عنوان یک محاسبه می‌شود اما برای یک متخصص (expert's) این مقدار ۳ است. این عدد مدتی پس از رای موافق تغییر می‌کند نه فورا، بنابراین هنگامی که شما رای موافق دادید فقط یک تغییر می‌کند اما مقدار بعدا به مقدار رای مثبت مربوطه تغییر می‌کند.

پیدا کردن کاربران

برای اینکار می‌توان در سمت راست وسط صفحه پنچره Find user را پیدا کرد و در فیلد Handle نام کاربری آن‌ها را نوشت.

ایجاد مشکل (سوال)

اکثر دورها نوشته شده توسط انجمن‌ها هستند. وقتی به الزامات خاصی رسیدید دکمه Propose a contest/problems زیر پروفایل شما ظاهر می‌شود. در این مورد در این لینک + بیشتر بخوانید.

انواع کدفورسس راند

در حال حاضر ۵ نوع راند وجود دارد:

  • نوع Div. 3 rounds: این راند برای همه کاربران با 1599=> رتبه بندی میشوند. هر تسک در این مسابقه مقداری یکسان دارد. پس از راند، یک مرحله هک ۱۲ ساعته باز می‌شود که در آن همه کاربران می‌توانند به ارسال‌های دیگران نگاه کنند و سعی کنند یک راه متقابل برای راه حل خود پیدا کنند و آن را هک کنند. امتیاز اضافی برای این هک‌ها دریافت نمی‌کنید.
  • نوع Educational Rounds: این راندها برای همه کاربران 2099=> رتبه‌بندی شده است. همانند div.3 هر کاری در این مسابقه همان میزان است و پس از راند هم یک مرحله ۱۲ ساعته هک وجود دارد که همه می‌توانند به ارسال‌های دیگران نگاه کنند و سعی کنند یک راه متقابل برای راه حل خود پیدا کنند و آن را هک کنند. امتیاز اضافی برای این هک‌ها دریافت نمی‌کنید.
  • نوع Div. 2 rounds: این راندها برای همه کاربران 2099=> رتبه‌بندی شده است. تفاوت آن با div.2 و مسابقات آموزشی این است که ارزش تسک‌ها (سوالات) توسط سازمان دهندگان دور انتخاب می‌شود و وظایف (تسک‌ها) آسانتر از وظایف سخت‌تر ارزش کمتری دارد. همچنین بعد از مسابقه مرحله هک وجود ندارد. اگر مشکلی حل کردید و آن قفل کردید می‌توانید در طول راند هک کنید. پس از قفل کردن می‌توانید به اتاق انتخاب بروید و موارد ارسالی همه موارد اتاق خود را مشاهده کنید. شما فقط می‌توانید افراد را از اتاق خود هک کنید.
  • نوع Div. 1 rounds: این راند ها برای همه کاربران 1900=< رتبه بندی می‌شوند. بقیه موارد مانند div.2 می‌باشد.
  • نوع Open rounds: این راند‌ها برای همه باز و دارای امتیاز هستند. فرمت آن‌ها همانند div.1 و div.2 هستند. پر طرفدارترین این دورها Global Rounds هستند که تقریبا ماهی یکبار انجام میشوند.

نکته: div.4 هم برای ریتینگ 1399=> وجود دارد که احتمالا دیگر وجود ندارد برای همین در اینجا لیست نکردیمش!

سرمقاله یا Editorials

پس از هر مسابقه یک Editorials منتشر می‌شود. سرمقاله وبلاگی است که توسط نویسندگان راند نوشته شده است که حاوی راه حل‌هایی برای تمام مشکلات مسابقه است، گاهی اوقات با کد. با کلیک بر روی دکمه tutorial در سمت راست پایین صفحه مشکل در قسمت contest materials به آن دسترسی دارید.

پر.ن تتوریال
پر.ن تتوریال
solution code
solution code

مسابقات مجازی (Virtual Contests)

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

چگونه هک کنیم؟ 🏴‍☠️

برای اینکار بای روی نماد قفل برای قفل کردن یک مشکل کلیک کنید. توجه کنید که پس از قفل کردن مشکل، نمی‌توانید راه حل خود را برای آن ارسال کنید. سپس به اتاق نتایج بروید. جایی که می‌توانید کدهای هم اتاقی‌ها برای مشکلاتی که قبلا قفل کرده‌اید را ببینید (با دوبار کلیک روی آن در جدول نتاجی اتاق می‌توانید راه حل خاصی را ببینید) بعد از اینکه راه حل شخصی را باز کردید می‌توانید آن را در نظر بگیرید و سپس آن را هک کنید. هنگام هک کردن یک کد شما در حال وارد کردن تستی هستید که در آن کد به احتمال زیاد شکست می‌خورد. (ممکن است پاسخ اشتباه باشد یا با محدودیت زمان یا حافظه تمام شده باشد) هنگامی که می‌خواهید یک تست بزرگ وارد کنید میتوانید به جای تایپ مولد تست را ارسال کنید. مولد تست باید برنامه شما باشد که یک فایل تست در آن تولید می‌کند. پس از هک یک کد می‌توانید نتیجه را مشاهده کنید. نتیجه ممکن است Successful hack باشد که با اینکار شما ۱۰۰ امتیاز دریافت می‌کنید. در غیر اینصورت Unsuccessful hack است که کد شکست نمی‌خورد و شما 50 امتیاز منفی دریافت می‌کنید.

این قابلیت برای این است که راه حل‌هایی که صرفا بر اساس شانس و تست کیس ها Accept شده اند مردود اعلام شوند.



10 نکته برای شروع codeforces

  • 1. اگر در برنامه‌نویسی رقابتی مبتدی هستید، مستقیما وارد مسابقات نشوید. ابتدا وارد PROBLEMSET شوید و سطح سختی سوالات را هم 800 تا 1000 تنظیم کنید. پس از آن که سوالات با این درجه سختی ظاهر شدند شروع به حل سوال کنید. حداقل 30 تا 40 سوال حل کنید و با نوع سوالات و بستر سوالات آشنا شوید و پس از آن به سراغ مسابقات بروید.
  • 2. سعی کنید همه مسابقات را انجام دهید. (هر هفته ۲ تا ۳ مسابقه وجود دارد) در ابتدا ممکن است یک یا دو سوال را در مسابقات حل کنید. یا حتی یک مشکل را نتوانید حل کنید اما لازم نیست امید خود را از دست بدهید. به تمرین و حل مشکلات ادامه دهید. شما نمی‌توانید در ۱ یا ۲ ماه برترین کد نویس شوید. نیاز به ثبات بالا و تمرین زیاد دارید.
  • 3. از آنجایی که مسابقات محدود به زمان هستند شما نیز باید روی آن تمرکز کنید و سعی کنید مشکلات را تا جایی که می‌توانید سریع حل کنید.
  • 4. سرمقاله‌ها را فقط در صورتی تماشا کنید که به آن سوال زمان کافی داده اید. اگر سرمقاله را به طور کامل نگاه نمی‌کنید، ابتدا برچسب‌ها را ببینید و سپس به مشکل فکر کنید. حتی پس از آن، اگر ایده‌ای برای حل این سوال ندارید به سراغ سرمقاله بروید.
  • 5. پس از هر مسابقه سعی کنید تا مشکلات باقی مانده از مسابقه را حل کنید. این بسیار مهم است زیرا می‌توانید بسیاری از مفاهیم و ترفندهای جدید را از آن یاد بگیرید. برای کسانی که نمی‌دانند حل کردن به معنای حل مسائل باقی مانده از مسابقات است که در طول مسابقه نتوانستید آن‌ها را حل کنید.
  • 6. پس از حل هر مشکلی تمرینی به راه حل‌های دیگر کاربران نگاه کنید و همچنین از آن راه حل‌ها روش‌های متفاوت و آسانی را یاد خواهید گرفت که مطمئنا در مشکلات بعدی به شما کمک می‌کنند.
  • 7. به محض اینکه در حل سوال با یک سطح دشواری خاص اطمینان پیدا کردید سطح دشواری سوالات را افزایش دهید.
  • 8. همچنین اگر می‌خواهید مشکلات مربوط به موضوع خاصی را تمرین کنید می‌توانید برچسب ها را اضافه کنید.
  • 9. همانطور که مشکلات بیشتر و بیشتری را انجام خواهید داد، اعتماد به نفس شما افزایش می‌یابد و اگر ثابت قدم باشید، مطمئنا یک کدنویس برتر خواهید شد.
  • 10. در نهایت سازگار باشید (BE CONSISTENT) و به تمرین ادامه دهید (BE CONSISTENT).


نکته مهم:

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


موفق باشید ❤