- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
در این سوال، شما سیستمی برای مدیریت آگهیهای مسکن طراحی میکنید. هر آگهی میتواند برای فروش، رهن یا اجاره باشد و دارای ویژگیهایی از جمله عنوان، قیمت، متراژ، نوع ملک (آپارتمان یا حیاط)، وضعیت (فروش، رهن یا اجاره)، و مختصات جغرافیایی (عرض و طول جغرافیایی) خواهد بود. شما باید این ویژگیها را در کوئریهای مختلف مانند افزودن آگهی، جستجو و حذف آگهیها مدیریت کنید.
دستورها
دستور add_house
add_house
فرم کلی این دستور به صورت زیر است:
add_house -name="<title>" -type="<type>" -status="<status>" -price=<price> -area=<area> -latitude=<latitude> -longitude=<longitude> [-desc="<description>"]
<title>
عنوان آگهی (منحصربهفرد و اجباری).<type>
نوع ملک (مانندapartment
برای آپارتمان یاyard
برای حیاط و اجباری).<status>
وضعیت ملک (sale
برای فروش،rent
برای رهن یا اجاره و اجباری).<price>
قیمت ملک (عدد صحیح و مثبت به تومان و اجباری).<area>
متراژ ملک (عدد صحیح و مثبت بر حسب متر مربع و اجباری).<latitude>
عرض جغرافیایی ملک (عدد حقیقی و اجباری).<longitude>
طول جغرافیایی ملک (عدد حقیقی و اجباری).[description]
توضیحات اختیاری.
اگر عنوان آگهی قبلاً ثبت شده باشد، پیام invalid title
چاپ شود.
در غیر این صورت، پیام house added successfully
چاپ شود.
دستور get_houses
get_houses
فرم کلی این دستور به صورت زیر است:
get_houses -type="<type>" -status="<status>" [-min_price=<min_price>] [-max_price=<max_price>] [-min_area=<min_area>] [-max_area=<max_area>] -latitude=<latitude> -longitude=<longitude>
این دستور به معنی جستجو برای آگهیهایی با ویژگیهای مشخص است.
<type>
نوع ملک (مانندapartment
یاyard
و اجباری).<status>
وضعیت ملک (sale
یاrent
و اجباری).[min_price]
حداقل قیمت آگهی (عدد صحیح و اختیاری).[max_price]
حداکثر قیمت آگهی (عدد صحیح و اختیاری).[min_area]
حداقل متراژ آگهی (عدد صحیح وختیاری).[max_area]
حداکثر متراژ آگهی (عدد صحیح و اختیاری).<latitude>
عرض جغرافیایی منطقه جستجو (عدد حقیقی و اجباری).<longitude>
طول جغرافیایی منطقه جستجو (عدد حقیقی و اجباری).
در این دستور، آگهیها باید بر اساس نزدیکی جغرافیایی به منطقه جستجو مرتب شوند. آگهیهایی که نزدیکتر به مختصات جستجو هستند، اول نمایش داده شوند. برای محاسبه نزدیکی از فرمول فاصله هاروارد ($Haversine Formula$) استفاده کنید. سپس نام آگهیهای مرتبشده را به ترتیب در یک خط و با یک فاصله بین آنها چاپ کنید. (نزدیکترین آگهی باید در ابتدای خط چاپ شود.) اگر لیستی که باید چاپ شود خالی است، عبارت no house found!
را چاپ کنید.
دستور remove_house
remove_house
فرم کلی این دستور به صورت زیر است:
remove_house -name="<title>"
این دستور به معنی حذف آگهی با عنوان <title>
است.
- اگر آگهی با این عنوان موجود نباشد، پیام
invalid title
چاپ شود. - در غیر این صورت، پیام
house removed successfully
چاپ شود.
نکات
- تمام ورودیها حروف کوچک انگلیسی و اعداد هستند و حداکثر طول هر رشته ۲۰ است.
- قیمت و متراژ همگی مقادیر صحیح و مثبت هستند.
- مختصات جغرافیایی (عرض و طول) مقادیر حقیقی و دقیق هستند و تا ۴ رقم اعشار در ورودی داده میشوند.
- مقایسه فاصلهها باید تا حداقل ۴ رقم اعشار دقیق باشند و داوری کد بر اساس ۴ رقم اول اعداد انجام میشود.
- تضمین میشود فرمت دستورهای ورودی، مطابق با صورت مسئله و معتبر هستند.
- به حروف کوچک و بزرگ در عبارات خروجی دقت کنید. برای گرفتن امتیاز کامل، خروجی شما باید کاملا شبیه عبارات در صورت مسئله باشند.
ورودی
در سطر اول عدد صحیح و مثبت $n$ داده میشود که تعداد دستورها را مشخص میکند.
$$1 \leq n \leq 100$$
در $n$ سطر بعدی، هر سطر شامل یک دستور از نوعهای تعریفشده است.
خروجی
خروجی شامل $n$ سطر است که پاسخ مناسب به هر دستور را چاپ میکند.
مثالها
ورودی نمونه ۱
7
add_house -name="apartment1" -type="apartment" -status="sale" -price=3000000 -area=80 -latitude=35.6895 -longitude=51.3890
add_house -name="yard1" -type="yard" -status="rent" -price=5000000 -area=200 -latitude=35.6995 -longitude=51.3900
add_house -name="yard2" -type="yard" -status="rent" -price=5000000 -area=200 -latitude=35.6995 -longitude=51.3900
add_house -name="apartment2" -type="apartment" -status="sale" -price=4000000 -area=100 -latitude=35.6985 -longitude=51.3850
get_houses -type="apartment" -status="sale" -latitude=35.6890 -longitude=51.3880
remove_house -name="yard1"
get_houses -type="yard" -status="rent" -latitude=35.6890 -longitude=51.3890
خروجی نمونه ۱
house added successfully
house added successfully
house added successfully
house added successfully
apartment1 apartment2
house removed successfully
yard2
ورودی نمونه ۲
5
add_house -name="apartment1" -type="apartment" -status="sale" -price=3500000 -area=90 -latitude=35.7100 -longitude=51.3800
add_house -name="apartment2" -type="apartment" -status="sale" -price=3800000 -area=110 -latitude=35.7200 -longitude=51.3700
get_houses -type="apartment" -status="sale" -latitude=35.7100 -longitude=51.3800
get_houses -type="apartment" -status="sale" -latitude=35.7100 -longitude=51.3800 -min_price=3600000
remove_house -name="apartment2"
خروجی نمونه ۲
house added successfully
house added successfully
apartment1 apartment2
apartment2
house removed successfully
ارسال پاسخ برای این سؤال