»  نکته‌ای در مورد کلاس‌ها و مجموعه‌ها در ++C
بررسی روش تعریف کلاس برای قابلیت استفاده از ظرف‌های مجموعه (set و unordered_set) در زبان برنامه‌نویسی ++C

زبان برنامه‌نویسی ++C دو کلاس set و unordered_set رو برای پیاده‌سازی مفهوم مجموعه (ظرفی با عناصر غیرتکراری) داره.

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

ادامه ... [بازگشت به فهرست]
»  سوال Free Ticket
راهنمای حل سوال Free ticket، از سوالات المپیاد ملی کامپیوتر هندوستان

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

ادامه ... [بازگشت به فهرست]
»  sync_with_stdio در زبان ++C
نکته‌ای در مورد کارایی عملیات ورودی و خروجی در زبان برنامه‌نویسی ++C و عملکرد تابع sync_with_stdio

زبان برنامه‌نویسی ++C علاوه بر ابزارهایی مثل cin و cout برای عملیات I/O، توابعی مثل scanf و printf رو هم برای همین کارها از زبان برنامه‌نویسی C به ارث برده. هر کدوم از این دو دسته مزایایی دارن که ممکنه بخوایم از هر دو در برنامه‌نویسی استفاده کنیم. مثلا printf فرمت‌بندی خروجی راحت‌تری نسبت به cout داره. اما برای کاربری‌های عادی استفاده از cout پیچیده‌گی کمتری داره.

ادامه ... [بازگشت به فهرست]
»  ابزار Microsoft Solver Foundation
معرفی ابزار Microsoft Solver Foundation برای حل مسائل مدل‌سازی، شبیه‌سازی ریاضی و بهینه‌سازی

ابزار Microsoft Solver Foundation امکان اجرای شبیه‌سازی‌های ریاضی، مدل‌سازی و حل مسائل بهینه‌سازی با استفاده از بستر Net. رو فراهم می‌کنه. به عنوان مثال می‌تونید با این ابزار هر نوع مساله‌ی بهینه‌سازی خطی رو حل کنید.

اینجا مثال‌هایی از روش استفاده ذکر شده.

ارسال پیام [بازگشت به فهرست]
»  ابزار VJudge
معرفی وب‌سایت Virtual Judge برای برگزاری مجازی مسابقه‌ی برنامه‌نویسی به سبک مسابقات ACM-ICPC

وب‌سایت Virtual Judge این امکان رو فراهم می‌کنه که با ترکیب دلخواهی از سوالات وب‌سایت‌های مخزن سوالات برنامه‌نویسی مثل UVA، Codeforces و خود سوالات ACM-ICPC، مسابقه‌ی مجازی برگزار کرد. از این حیث برای تمرین تیم‌های مسابقات ACM-ICPC بسیار مناسب و کاراست.

ارسال پیام [بازگشت به فهرست]
»  هدر فایل bits/stdc++.h
معرفی هدرفایل bits/stdc++.h برای کاهش زمان آماده شدن کد مسابقات برنامه‌نویسی

زمان مسابقه تایپ اسم تک تک هدرفایل‌های مورد نیاز برای اجرای برنامه زمان می‌بره. گاهی تابع یا کلاس جدیدی استفاده می‌کنیم که باید یه بار دیگه برگردیم بالای کد و هدرفایل رو ضمیمه کنیم. از یه سمت هم گاهی مطمئن نیستیم باید کدوم فایل اضافه شه.

هدر فایل bits/stdc++.h این زحمت رو کم می‌کنه. زمانی که این هدر رو include می‌کنیم، تمام فایل‌های سرآیند استاندارد به برنامه اضافه می‌شن و اصولا دیگه نیازی نیست چیزی رو اضافه کنیم. ممکنه به نظر بیاد این اضافه شدن دسته‌جمعی سربار زیادی داشته باشه. اما باید در نظر داشت که حتی اگه اینطور باشه، برای ما زمان اجرا مهم هست و نه زمان کامپایل برنامه.

ارسال پیام [بازگشت به فهرست]
»  نکته‌ای از مسأله‌ی Graphical Editor
استفاده از stringstream در حل سوالات مسابفات برنامه‌نویسی با زبان برنامه‌نویسی ++C

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

اینجاست که stringstream به کار می‌یاد و می‌تونه به ما کمک کنه خط رشته‌ای ورودی رو در صورت نیاز خیلی ساده به عدد تبدیل کنیم یا از پردازش خط صرف‌نظر کنیم.

ارسال پیام [بازگشت به فهرست]
»  ابزار UVA Toolkit
معرفی وب‌سایت UVA Toolkit برای کمک به حل سوالات برنامه‌نویسی UVA Online Judge

وب‌سایت UVA Toolkit این امکان رو فراهم می‌کنه که برای سوالات وب‌سایت UVA Online Judge ورودی مد نظرمون رو بدیم و خروجی متناظرش رو ببینیم. به این ترتیب هم می‌تونیم ابهام در نحوه‌ی تولید خروجی رو رفع کنیم و هم زمان برای تولید دستی خروجی نذاریم.

در ضمن برای هر سوال موضوع یا روش حل سوال راهنمایی شده.

ارسال پیام [بازگشت به فهرست]
»  نکته‌ای از مسأله‌ی LC-Display
نکته‌ای در باب روش ذخیره کردن ورودی یک مسأله

زمانی که ورودی مسأله از نوع عددی هست (حالا صحیح یا اعشاری) لزومی نداره داخل متغیر عددی ذخیره کنیم. گاهی ممکنه ذخیره‌ی اون به صورت رشته بهتر باشه. مثلا برای مسأله‌ی LC-Display باید عدد رو از چپ به راست و رقم به رقم پردازش کنیم. پس چه بهتر که به صورت رشته یا آرایه‌ای از کاراکترها ذخیره شه.

ارسال پیام [بازگشت به فهرست]
»  نکته‌ای در استفاده از map
نکته‌ای در مورد استفاده از ساختمان داده‌ی map با مثالی به زبان برنامه‌نویسی ++C

ساختمان داده‌ی map (یا dictionary) از ابزارهای مهم و کاربردی هر زبان برنامه‌نویسی‌ه که برای برقراری نگاشت بین هر نوع کلید و مقدار متناظر استفاده می‌شه. آرایه‌های معمولی یه عدد صحیح رو به عنوان کلید به یه مقدار از هر نوع کلاس یا نوع داده نگاشت می‌کنن. اما وقتی از map استفاده می‌کنیم، این امکان بهمون داده می‌شه که از اشیاء کلاس‌ها و انواع داده‌های پیش‌فرض هر زبان برنامه‌نویسی به عنوان کلید استفاده کنیم. پس مشخصه که پیاده‌سازی خیلی از عملیات‌ها رو ساده‌تر می‌کنه و کمک بزرگی به حساب می‌یاد.

ادامه ... [بازگشت به فهرست]
»  محاسبه‌ی فاکتوریل اعداد بزرگ
چطور شاخ غول فاکتوریل را بشکنیم

چند روز پیش که با بچه‌ها نمونه سوالات ACM رو حل می‌کردیم، یه جایی به عدد 123456789 خوردیم و این سوال پیش اومد که می‌شه فاکتوریل این عدد رو حساب کرد؟

ما معمولا برای توضیح رشد با سرعت زیاد از عبارت «رشد نمایی» استفاده می‌کنیم. رشد نمایی یعنی هر گام که پیش می‌ریم، از گام $n$ به گام $n + 1$، اندازه دو یا هر چند برابری می‌شه که به اون پایه یا مبنای رشد هم می‌گن. این پایه همیشه ثابت می‌مونه. یعنی چه مرحله‌ی اول باشیم و چه مرحله‌ی هزارم، همیشه مرحله‌ی بعدی ضرب در عدد ثابتی می‌شه. در حالت کلی می‌شه نوشت:

ادامه ... [بازگشت به فهرست]