مسابقه‌ی ای‌سی‌ام

مستندات مسابقه‌ی برنامه‌نویسی دانش‌جویی ای‌سی‌ام در ایران

ابزار کاربر

ابزار سایت


آماده‌سازی:استراتژی_مسابقه_دادن

استراتژی مسابقه دادن

در این صفحه به بررسی استراتژی تیمی برای شرکت در مسابقه‌ی ای‌سی‌ام پرداخته می‌شود. پیش از هر چیز، لازم است که سه نکته را در ذهن داشته باشید:

  • این یک مسابقه‌ی گروهی است و هر گروه ۳ عضو دارد.
  • زمان استفاده از کامپیوتر بسیار گران‌بها است.
  • شروع مسابقه، مهم‌ترین قسمت آن است.

استراتژی عمومی

در شروع مسابقه، سریع‌ترین تایپیست، یک قالب کد و همچنین یک اسکریپت برای کامپایل برنامه‌ها می‌نویسد. در این مسابقه بهتر است سوالات آسان‌تر زودتر حل شوند بنابراین دو نفر دیگر (که از کامپیوتر استفاده نمی‌کنند) سوالات را برای پیدا نمودن ساده‌ترین مسئله، بررسی می‌نمایند (یک نفر از اول به آخر و دیگری از آخر به اول). به محض یافتن یک مسئله که به اندازه‌ی کافی ساده است (به طوری که در ۱۰ تا ۱۵ دقیق قابل حل باشد)، این مسئله همراه با یک شرح مختصر در اختیار سریع‌ترین تایپیست قرار می‌گیرد. دو عضو دیگر تیم که مشغول به تایپ نمی‌باشند، به بررسی سوالات ادامه می‌دهند. در صورتی که مسئله‌ای ساده‌تر (قابل حل در ۵ دقیقه) یافت شود، اولویت به حل این مسئله داده می‌شود. بعد از اینکه حداقل یکی از دو عضو همه‌ی سوالات را خواند، این دو نفر به بحث و بررسی همه‌ی مسائل می‌پردازند.

اتفاقی که نباید در شروع مسابقه رخ دهد: ممکن است بعد از خواندن اولین سوال به این نتیجه برسیم که توانایی حل این مسئله را داریم. به این ترتیب از بررسی سایر سوالات صرف‌نظر کرده و دو ساعت بعد را به حل این مسئله اختصاص می‌دهیم بدون این‌که موفقیتی به دست آوریم؛ در حالی که دو مسئله‌ی ساده‌تر در مجموعه موجود هستند که آن‌ها را نخوانده‌ایم. به همین دلیل، خواندن همه‌ی سوالات و بحث و بررسی آنها توسط اعضا، در شروع مسابقه بسیار مهم است.

تیم به حل سوالات ادامه می‌دهد. در صورتی که یکی از اعضای تیم می‌داند که یک سوال چگونه حل می‌شود، اگر کسی از کامپیوتر استفاده نمی‌کند راه‌حل را کد کرده و در غیر این صورت کد را بر روی یک کاغذ می‌نویسد.

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

نکات دیگر

علاوه بر استراتژی کلی، لازم است نکات دیگری نیز رعایت شود:

  • در صورتی که از راه‌حل خود مطمئن نیستید آن را با هم‌تیمی‌های خود بررسی کنید. در صورتی که در حل یک مسئله گیر افتاده‌اید، در صورتی که ارزش ایجاد وقفه در کار هم‌تیمی‌هایتان را دارد، آن را برای هم‌تیمی خود شرح دهید.
  • در صورتی که وقت دارید، پیش از استفاده از کامپیوتر برای کد کردن یک پاسخ، قسمت‌های مهم آن را بر روی یک کاغذ بنویسید (لازم نیست به همه‌ی جزئیات پرداخته شود). این کار باعث می‌شود تا حد زیادی در زمان استفاده از کامپیوتر صرفه‌جویی شود.
  • رفع اشکال کد را با استفاده از کامپیوتر انجام ندهید. کد و خروجی آن را پرینت کرده و رفع اشکال را بر روی کاغذ انجام دهید.
  • اگر در حل یک مسئله گیر کرده‌اید، قدم بزنید و یا به دست‌شویی بروید. بهترین ایده‌ها این‌جا به سراغ شما می‌آیند.
  • اگر به دفعات برای یک مسئله WA دریافت کرده‌اید، آن مسئله را به حال خود رها کرده و به حل مسئله‌ی دیگری بپردازید. ممکن است بعدتر راه‌حلی به ذهن شما برسد. همچنین در دوباره‌نویسی کامل یک پاسخ شک نکنید. انجام این کار برای اکثر مسائل، بیشتر از ۱۵ دقیقه زمان نمی‌برد.
  • آیا ایجاد ورودی‌هایی که پاسخ صحیح آن‌ها را می‌دانید ممکن است؟ اگر این‌طور است ارزش دارد که پیش از سابمیت برنامه، آن را با ورودی‌های دیگر نیز بررسی کنید.
  • زمانی که از حل یک مسئله فارغ شدید، تمام برگه‌های مربوط به آن مسئله را دور بریزید. هم در زمان یافتن برگه‌ها صرفه‌جویی می‌شود و هم حس خوبی دارد.
  • چندوقت‌یک‌بار نگاهی به جدول امتیازات بیندازید. اگر مسئله‌ای وجود دارد که بیشتر تیم‌ها آن را حل کرده‌اند، احتمالاً مسئله‌ی آسانی است.
  • گزارشی از همه‌ی سابمیت‌های انجام‌شده بر روی یک کاغذ داشته باشید. همین‌طور از این‌که کدام مسئله به کدام یک از اعضا محول شده است.
  • استراتژی اواخر مسابقه را فراموش نکنید. وقتی که زمان در حال تمام شدن است، نباید هر کس بر روی یک مسئله‌ی جداگانه کار کند. لازم است همه‌ی اعضا بر روی حل یک مسئله‌ی واحد تمرکز کنند (البته باید مطمئن شد که هر یک کار مفیدی انجام می‌دهند. برای مثال یک نفر راه‌حل را کد می‌کند، نفر دوم بر کدنویسی نظارت دارد و نفر سوم در صدد یافتن ورودی‌های سخت و حساس است). دانستن زمان ورود به این فاز از کار گروهی تا حدودی سخت است. همچنین صرف‌نظر از سوال‌هایی که راه‌حل آن را می‌دانیم و تنها لازم است کد آن را پیاده کنیم نیز اراده‌ی زیادی می‌طلبد.
  • در برخی موارد لازم است که یک نفر ۲ تا ۳ ساعت پیش از پایان مسابقه بر روی یک مسئله فکر کند چرا که ممکن است شرایط زیر ایجاد شود. همه چیز خوب پیش رود و همه به نوبت از کامپیوتر استفاده کنند. بعد از ۴ ساعت ۲ مسئله‌ی سخت باقی مانده باشد به شکلی که حل هر یک از آنها نیازمند به ۱ ساعت فکر کردن و ۴۵ دقیقه برنامه‌نویسی باشد. با وجود اینکه هر یک از اعضا یک ساعت زمان دارند و مجموع این زمان برای حل حداقل یکی از مسائل کافی است، اما زمان لازم برای فکر کردن قابل تقسیم کردن بین اعضا نمی‌باشد. از طرفی برای کد کردن راه‌حل، نیاز به دانستن آن داریم.
  • استفاده از فاز «سابمیت آزادانه» باید با احتیاط صورت پذیرد. معنی این فاز به این شکل است: «در شرایط کنونی، حل یک مسئله‌ی دیگر بیشتر از هر جریمه‌ای که ممکن است در پی داشته باشد، اهمیت دارد پس به محض این‌که راه‌حلی با احتمال اکسپت بیش از صفر داشته باشیم، آن را سابمیت می‌کنیم». معمولاً زودتر از ۳۰ دقیقه‌ی پایانی وارد این فاز نمی‌شویم مگر اینکه در شروع کار تعداد زیادی سابمیت‌های اشتباه و در نتیجه جریمه‌ی زیادی داشته باشیم که در این صورت می‌توان زودتر به این فاز وارد شد.
  • مسابقه ۵ ساعت ادامه خواهد داشت اما یک تمرین ۵ ساعته می‌تواند تمام روز شما را درگیر کند. شما می‌توانید در عوض تمرین‌های ۳/۵ تا ۴ ساعته داشته باشید. حتی دوندگان ماراتون نیز تمرین‌های ۳۰ کیلومتری انجام می‌دهند در حالی که طول مسیر مسابقه‌ی اصلی، ۴۲ کیلومتر است.

مرجع

آماده‌سازی/استراتژی_مسابقه_دادن.txt · آخرین ویرایش: 2014/11/30 00:33 توسط حمید ضرابی‌زاده