• محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

مقدمه

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

توضیح تصویر

دستورها

فاز اول

دستور register

فرم کلی این دستور به صورت register <username> است و به معنی این است که یک کاربر با نام کاربری <username> می‌خواهد در دیوار ثبت نام کند.

  • اگر این نام کاربری قبلاً توسط کاربر دیگری استفاده شده، خطای invalid username را چاپ کنید.
  • اگر خطایی وجود نداشت پیام registered successfully را چاپ کنید.

دستور add_advertise

فرم کلی این دستور به صورت add_advertise <username> <title> است و به معنی این است که کاربر <username> می‌خواهد آگهی با عنوان <title> را در دیوار منتشر کند.

  • اگر این نام کاربری قبلاً ثبت نام نکرده، خطای invalid username را چاپ کنید.
  • اگر این عنوان آگهی، برای آگهی دیگری استفاده شده، خطای invalid title را چاپ کنید.
  • اگر خطایی وجود نداشت پیام posted successfully را چاپ کنید.

دستور rem_advertise

فرم کلی این دستور به صورت rem_advertise <username> <title> است و به معنی این است که کاربر <username> می‌خواهد آگهی با عنوان <title> را که قبلاً در دیوار منتشر کرده را پاک کند.

  • اگر این نام کاربری قبلاً ثبت نام نکرده، خطای invalid username را چاپ کنید.
  • اگر این عنوان آگهی، روی هیچ آگهی قبلاً نیامده، خطای invalid title را چاپ کنید.
  • اگر این عنوان آگهی، برای این کاربر نیست، خطای access denied را چاپ کنید.
  • اگر خطایی وجود نداشت پیام removed successfully را چاپ کنید.

دستور list_my_advertises

فرم کلی این دستور به صورت list_my_advertises <username> است و به معنی این است که یک کاربر با نام کاربری <username> می‌خواهد لیست آگهی‌هایی که منتشر کرده را مشاهده کند.

  • اگر این نام کاربری قبلاً ثبت نام نکرده، خطای invalid username را چاپ کنید.
  • در غیر این صورت در یک خط عنوان همه‌ی آگهی‌ها را به ترتیب زمان انتشار در یک سطر با یک فاصله از هم چاپ کنید.

فاز دوم

دستور add_favorite

فرم کلی این دستور به صورت add_favorite <username> <title> است و به معنی این است که کاربر <username> می‌خواهد آگهی با عنوان <title> را به لیست علاقه‌مندی‌هایش اضافه کند.

  • اگر این نام کاربری قبلاً ثبت نام نکرده، خطای invalid username را چاپ کنید.
  • اگر آگهی با این عنوان قبلاً منتشر نشده خطای invalid title را چاپ کنید.
  • اگر این آگهی با این عنوان قبلاً به لیست علاقه‌مندی‌ها اضافه شده، خطای already favorite را چاپ کنید.
  • اگر خطایی وجود نداشت پیام added successfully را چاپ کنید.

دستور rem_favorite

فرم کلی این دستور به صورت rem_favorite <username> <title> است و به معنی این است که کاربر <username> می‌خواهد آگهی با عنوان <title> را از لیست علاقه‌مندی‌هایش حذف کند.

  • اگر این نام کاربری قبلاً ثبت نام نکرده، خطای invalid username را چاپ کنید.
  • اگر آگهی با این عنوان قبلاً منتشر نشده خطای invalid title را چاپ کنید.
  • اگر این آگهی با این عنوان اکنون در لیست علاقه‌مندی‌هایش نیست، خطای already not favorite را چاپ کنید.
  • اگر خطایی وجود نداشت پیام removed successfully را چاپ کنید.

دستور list_favorite_advertises

فرم کلی این دستور به صورت list_favorite_advertises <username> است و به معنی این است که یک کاربر با نام کاربری <username> می‌خواهد لیست آگهی‌هایی که به علاقه‌مندی‌هایش اضافه کرده را مشاهده کند.

  • اگر این نام کاربری قبلاً ثبت نام نکرده، خطای invalid username را چاپ کنید.
  • در غیر این صورت در یک خط عنوان همه‌ی آگهی‌ها را به ترتیب زمان اضافه شدن به علاقه‌مندی در یک سطر با یک فاصله از هم چاپ کنید.

فاز سوم

دستور add_advertise

فرمت کلی این دستور به صورت add_advertise <username> <title> [<tag>] خواهد بود و به معنی این است که کاربر <username> می‌خواهد آگهی با عنوان <title> را با برچسب <tag> منتشر کند.


دستور list_my_advertises

فرم کلی این دستور به صورت list_my_advertises <username> [<tag>] است و به معنی این است که یک کاربر با نام کاربری <username> می‌خواهد لیست آگهی‌هایی که با برچسب <tag> منتشر کرده را مشاهده کند.

توجه کنید اگر مانند فاز اول، همچین کوئری داده شد ولی <tag> نداشت باید بدون در نظر گرفتن برچسب‌ها همه‌ی آگهی‌ها را نشان دهید.


دستور list_favorite_advertises

فرم کلی این دستور به صورت list_favorite_advertises <username> [<tag>] است و به معنی این است که یک کاربر با نام کاربری <username> می‌خواهد لیست آگهی‌هایی که برچسب <tag> را دارند و به علاقه‌مندی‌هایش اضافه کرده را مشاهده کند.

توجه کنید اگر مانند فاز اول، همچین کوئری داده شد ولی <tag> نداشت باید بدون در نظر گرفتن برچسب‌ها همه‌ی آگهی‌ها را نشان دهید.


نکات

  • به‌جای <username> یک رشته که نشان‌دهنده‌ی «نام کاربری» است، داده می‌شود.
  • به‌جای <title> یک رشته که نشان‌دهنده‌ی «عنوان آگهی» است، داده می‌شود.
  • هر رشته که در ورودی داده می‌شود. شامل ارقام، کاراکتر _، حروف کوچک یا بزرگ انگلیسی است و طول آن حداکثر ۲۰ است.
  • اگر آگهی از سایت دیوار حذف شده باشد باید از این لیست هم حذف شده باشد.
  • اگر لیستی را باید چاپ می‌کردید که خالی است، آن سطر را خالی بگذارید.

ورودی

در سطر اول ورودی، عدد صحیح و مثبت qq داده می‌شود. در qq سطر بعدی، در هر سطر یک دستور داده می‌شود. 1q501 \leq q \leq 50

خروجی

خروجی qq سطر دارد، در هر سطر پاسخ مناسب به هر دستور چاپ می‌شود.

مثال‌ها

ورودی نمونه ۱

9
register user1
register user2
add_advertise user1 car
add_advertise user2 laptop
add_advertise user2 laptop
list_my_advertises user1
list_my_advertises user2
rem_advertise user2 phone
list_my_advertises user2
Plain text

خروجی نمونه ۱

registered successfully
registered successfully
posted successfully
posted successfully
invalid title
car 
laptop 
invalid title
laptop 
Plain text

ورودی نمونه ۲

10
register user1
register user2
add_advertise user1 car
add_advertise user2 laptop
add_favorite user1 laptop
add_favorite user1 phone
add_favorite user2 laptop
rem_favorite user1 phone
list_favorite_advertises user1
list_favorite_advertises user2
Plain text

خروجی نمونه ۲

registered successfully
registered successfully
posted successfully
posted successfully
added successfully
invalid title
added successfully
invalid title
laptop 
laptop 
Plain text

ورودی نمونه ۳

9
register user1
register user2
add_advertise user1 car automotive
add_advertise user2 laptop electronics
add_advertise user2 phone electronics
add_advertise user1 laptop electronics
list_my_advertises user1 electronics
list_favorite_advertises user1
list_my_advertises user1
Plain text

خروجی نمونه ۳

registered successfully
registered successfully
posted successfully
posted successfully
posted successfully
invalid title


car 
Plain text

راهنمای تست‌ها

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

1. sample1.in
2. sample2.in
3. sample3.in
4. 1_register.in
5. 1_add_advertise.in 
6. 1_rem_advertise.in
7. 1_list_my_advertises.in
8. corner.in
9. corner_2.in
10. 2_add_favorite.in
11. 2_rem_favorite.in
12. 2_list_favorite_advertises.in
13. 3_add_advertise.in
14. 3_list_my_advertises.in
15. 3_list_favorite_advertises.in
Plain text

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.