سلام
بدون هیچ مقدمه ای میرم سراغ سوالات کانتست .
سوال اول :
سوال می گفت یه رشته عددی بین 3 تا 5 رقم بهتون میدم ، مقلوب ( reverse ) این رشته رو تو ورودی چاپ کنید .
ّبرای حل یه string در نظر گرفتم که با تابع reverse از کتابخونه algorithm از مجموعه STL های سی پلاس پلاس این رشته رو مقلوب کردم و ...
سوال دوم :
این سوال دو رشته به عنوان ورودی می داد که رشته اول "دوری" فرض شده بود ؛ یعنی اینکه بعد از کاراکتر آخر به کاراکتر اول میشه رفت و همین طور از اول به آخر .
سوال می پرسید که آیا رشته دوم یا reverse اون به صورت یه زیر رشته ( SubString ) از رشته اول هست یا نه ؟
برای این کار من رشته اول رو به آخر خودش اضافه می کردم ( با این کار دوری بودن رشته رو مهار می کردم ) ، بعد چک می کردم که رشته اول یا reverse اون تو این رشته هست یا نه .
سوال سوم :
سوال یه آرایه دو بعدی از اعداد می داد که برابر ارتفاع یه سری خونه بودن و سوال تعداد خونه های بد رو می خواست .
منظور از یه خونه بد اینه که نشه از اونجا دریا رو دید یا به عبارت دیگه در تمام جهات شمال ، جنوب ، شرق و غرب حداقل یه خونه وجود داشته باشه که ارتفاعش از این خونه بیشتر باشه .
برای حل من از هر خونه به چهار جهت اصلی حرکت می کردم و ارتفاع خونه های اون جهت رو مقایسه می کردم .
با توجه به اندازه داده های ورودی این روش مشکلی نداره ولی اگر اندازه جدول بزرگتر می بود این روش از نظر زمانی کارایی نداشت .
سوال چهارم :
این سوال دو مثلث می داد و مساحت ناحیه مشترک ( در صورت وجود ) رو می خواست .
به وضوح مجموعه رئوس ناحیه مشترک از یکی از دو مجموعه زیر باید باشن .
الف : راسی از مثلث اول که درون مثلث دوم قرار داره یا برعکس .
ب : نقطه تلاقی پاره خطی از مثلث اول با پاره خطی از مثلث دوم .
برای تشخیص مجموعه نقاط "الف" ، از ضرب خارجی استفاده می کردم .
برای تشخیص مجموعه نقاط "ب" ، برای هر مثلث سه پاره خط می ساختم و نقطه تقاطع ( در صورت وجود ) رو بدست می آوردم .
بعد از این کار convex-hull نقاط بدست اومده رو بدست می آوردم ولی بعد از حل اثبات کردم این کار لازم نیست .
در آخر مساحت چند ضلعی بدست اومده رو از طریق روش مثلث بندی بدست می آوردم .
کد هایی که سر کانتست ارسال کردم رو می تونید از اینجا دانلود کنید .
تو سوال آخر از همه توابعی که import شدن استفاده نشده .
با آرزوی موفقیت همه در مرحله دوم مسابقه