- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
از شما میخواهیم، قسمتی از سایت برای ارائه فیلمهای سینمایی را طراحی کنیم. قرار است تعدادی فیلم به سایت اضافه شود، هر بازیگر یک پروفایل دارد که به فیلمهایی که در آن بازی کرده را نشان میدهد. هر فیلم هم یک پروفایل دارد که جزئیات آن مثل اسم، سال انتشار، کیفیت فیلم و لیست بازیگران آن را نشان میدهد.
ساختار دستورها به این صورت است که ابتدا بازیگرها و فیلمها روی سایت تعریف میشوند، سپس در دستورهایی به شما گفته میشود که این بازیگر در این فیلم بازی کرده است و شما باید این مورد را ثبت کنید. همچنین ممکن است پروفایل یک بازیگر یا فیلم از سایت حذف شود و شما نباید دیگر آنها را نشان دهید.
فیلمها باید قابلیت دسته بندی شدن داشته بر اساس ویژگیهایشان داشته باشند.
دستورها
دستور ADD-MOVIE
ADD-MOVIEفرمت کلی دستور به صورت زیر است:
ADD-MOVIE <title> <date> <quality>
یعنی فیلمی با نام <title>، محصول سال <date> با کیفیت <quality> روی سایت آپلود شده است.
رشتهی <title> باید حداکثر ۲۰ کاراکتر باشد. رشتهی <date> باید یک عدد صحیح بین 1888 تا 2024 باشد. رشتهی <quality> باید یکی از مقادیر 720p، 1080p یا 4K باشد.
بعد از اضافه شدن هر فیلم باید یک عدد نسبت دهید که به آن <movie-id> میگوییم. برای هر فیلم، این عدد برابر تعداد فیلمهایی است که قبل از این فیلم با دستور ADD-MOVIES با موفقیت اضافه شدهاند. (مهم نیست اگر بعداً پاک شده باشند.)
یعنی اولین فیلم که بدون خطا اضافه میشود، <movie-id> آن برابر ۰، دومین فیلم ۱، سومین فیلم ۲ و... خواهد بود.
- اگر رشتهی
<title>قابل قبول نبود، خطایinvalid titleرا چاپ کنید. - اگر رشتهی
<date>قابل قبول نبود، خطایinvalid dateرا چاپ کنید. - اگر رشتهی
<quality>قابل قبول نبود، خطایinvalid qualityرا چاپ کنید. - در صورتی که هیچکدام از خطاهای بالا پیش نیامد، پیام
added successfully <movie-id>را چاپ کنید، که بهجای<movie-id>مقدار آن را قرار میدهید.
دستور REM-MOVIE
REM-MOVIEفرمت کلی دستور به صورت زیر است:
REM-MOVIE <movie-id>
این دستور یعنی میخواهیم فیلم <movie-id> از سایت حذف شود.
- اگر فیلمی با این
<movie-id>اکنون روی سایت وجود ندارد، خطایinvalid movie idرا چاپ کنید. - در صورتی که خطای بالا پیش نیامد، پیام
removed successfully <movie-id>را چاپ کنید، که بهجای<movie-id>مقدار آن را قرار میدهید.
دستور ADD-CAST
ADD-CASTفرمت کلی دستور به صورت زیر است:
ADD-CAST <name>
این دستور یعنی میخواهیم بازیگری با نام <name> را به سایت اضافه کنیم.
رشتهی <name> باید حداکثر ۲۰ کاراکتر باشد و فقط شامل حروف بزرگ و کوچک انگلیسی باشد.
بعد از اضافه شدن هر بازیگر باید یک عدد نسبت دهید که به آن <cast-id> میگوییم. مشابه <movie-id>، برای هر بازیگر، این عدد برابر تعداد بازیگرهایی است که قبل از این بازیگر با این دستور با موفقیت اضافه شدهاند. (مهم نیست اگر بعداً پاک شده باشند.)
- اگر رشتهی
<name>قابل قبول نبود، خطایinvalid nameرا چاپ کنید. - در صورتی که هیچکدام از خطاهای بالا پیش نیامد، پیام
added successfully <cast-id>را چاپ کنید، که بهجای<cast-id>مقدار آن را قرار میدهید.
دستور REM-CAST
REM-CASTفرمت کلی دستور به صورت زیر است:
REM-CAST <cast-id>
این دستور یعنی میخواهیم بازیگری با نام <cast-id> را از سایت حذف کنیم.
- اگر بازیگری با این
<cast-id>اکنون روی سایت وجود ندارد، خطایinvalid cast idرا چاپ کنید. - در صورتی که خطای بالا پیش نیامد، پیام
removed successfully <cast-id>را چاپ کنید، که بهجای<cast-id>مقدار آن را قرار میدهید.
دستور SHOW-MOVIE
SHOW-MOVIEفرمت کلی دستور به صورت زیر است:
SHOW-MOVIE <movie-id>
در این دستور به شما یک <movie-id> داده میشود و از شما میخواهیم در فرمت زیر مشخصات این فیلم را چاپ کنید:
{title:"title", date:"date", quality:"quality", casts:["cast-id-1", "cast-id-2", ...]}
که در داخل "، مقدارهای title، date، quality قرار میگیرد. توجه کنید cast-idها باید به ترتیب از کوچک به بزرگ باشند.
اگر فیلمی با این <movie-id> وجود ندارد. خطای invalid movie id را چاپ کنید.
دستور SHOW-CAST
SHOW-CASTفرمت کلی دستور به صورت زیر است:
SHOW-CAST <cast-id>
در این دستور به شما یک <cast-id> داده میشود و از شما میخواهیم در فرمت زیر مشخصات این بازیگر را چاپ کنید:
{name:"name", movies:["movie-id-1", "movie-id-2", ...]}
که در داخل "، مقدار name قرار میگیرد. توجه کنید movie-idها باید به ترتیب از کوچک به بزرگ باشند.
اگر بازیگری با این <cast-id> وجود ندارد. خطای invalid cast id را چاپ کنید.
دستور LINK-CAST-TO-MOVIE
LINK-CAST-TO-MOVIEفرمت کلی دستور به صورت زیر است:
LINK-CAST-TO-MOVIE <cast-id> <movie-id>
این دستور یعنی بازیگر با شمارهی <cast-id> در فیلم <movie-id> حضور داشته و باید این دو را به هم متصل کنید.
- اگر بازیگری با این
<cast-id>اکنون روی سایت وجود ندارد، خطایinvalid cast idرا چاپ کنید. - اگر فیلمی با این
<movie-id>اکنون روی سایت وجود ندارد، خطایinvalid movie idرا چاپ کنید. - اگر قبلاً این بازیگر به این فیلم اضافه متصل شده بود خطای
already linkedرا چاپ کنید. - در صورتی که هیچ کدام از خطاهای بالا پیش نیامد، پیام
successfully linked <cast-id> to <movie-id>را چاپ کنید، که بهجای<movie-id>و<cast-id>مقدار آن را قرار میدهید.
دستور FILTER-MOVIES-BY-TITLE
FILTER-MOVIES-BY-TITLEفرمت کلی دستور به صورت زیر است:
FILTER-MOVIES-BY-TITLE <pattern>
در این دستور باید movie-id تمام فیلمهایی که عنوان آنها با <pattern> شروع میشود را به ترتیب صعودی که داخل [] قرار دارند و با , از هم جدا شدهاند چاپ کنید. (دقیقاً مشابه نمونهها)
دستور FILTER-MOVIES-BY-DATE
FILTER-MOVIES-BY-DATEفرمت کلی دستور به صورت زیر است:
FILTER-MOVIES-BY-DATE <ineq> <n>
در این دستور باید movie-id تمام فیلمهایی که تاریخ انتشار آنها با <date-pattern> سازگار است را به ترتیب صعودی که داخل [] قرار دارند و با , از هم جدا شدهاند چاپ کنید. (دقیقاً مشابه نمونهها)
مقدار <ineq> <n> یکی از حالتهای>= n، > n ،= n، < n یا <= n را دارد که بهجای n یک عدد صحیح قرار میگیرد و شما باید همهی فیلمهایی که data آنها در سمت چپ این رابطه قرار میگیرد و حاصل درست میشود را چاپ کنید.
دستور FILTER-MOVIES-BY-QUALITY
FILTER-MOVIES-BY-QUALITYفرمت کلی دستور به صورت زیر است:
FILTER-MOVIES-BY-QUALITY <pattern>
در این دستور باید movie-id تمام فیلمهایی که کیفیت آن برابر <pattern> است را به ترتیب صعودی که داخل [] قرار دارند و با , از هم جدا شدهاند چاپ کنید. (دقیقاً مشابه نمونهها)
ورودی
در سطر اول ورودی، عدد صحیح و مثبت $n$ آمده که تعداد دستورها را نشان میدهد. $$1 \leq n \leq 3000$$
در $n$ سطر بعدی، در هر سطر یک دستور مطابق توضیحات سوال داده میشود.
خروجی
در $n$ سطر و در هر سطر، خروجی متناسب با هر دستور را چاپ کنید.
مثالها
ورودی نمونه ۱
14
ADD-MOVIE Hezarpa 2018 1080p
ADD-MOVIE Dracula 2016 720p
ADD-CAST RezaAttaran
ADD-CAST SiamakAnsari
ADD-CAST JavadEzati
LINK-CAST-TO-MOVIE 2 0
LINK-CAST-TO-MOVIE 1 1
LINK-CAST-TO-MOVIE 0 0
LINK-CAST-TO-MOVIE 0 1
SHOW-CAST 0
SHOW-CAST 1
SHOW-CAST 2
SHOW-MOVIE 0
SHOW-MOVIE 1
خروجی نمونه ۱
added successfully 0
added successfully 1
added successfully 0
added successfully 1
added successfully 2
successfully linked 2 to 0
successfully linked 1 to 1
successfully linked 0 to 0
successfully linked 0 to 1
{name:"RezaAttaran", movies:[0, 1]}
{name:"SiamakAnsari", movies:[1]}
{name:"JavadEzati", movies:[0]}
{title:"Hezarpa", date:"2018", quality:"1080p", casts:[0, 2]}
{title:"Dracula", date:"2016", quality:"720p", casts:[0, 1]}
ورودی نمونه ۲
23
ADD-MOVIE Hezarpa 2018 1080p
ADD-MOVIE Dracula 2016 720p
ADD-MOVIE The_Shawshank_Redemption 1994 1080p
ADD-MOVIE The_Godfather 1972 720p
ADD-MOVIE Interstellar 2014 4K
ADD-CAST Tom_Hanks
ADD-CAST Leonardo_DiCaprio
ADD-CAST Brad_Pitt
ADD-CAST InvalidCastNameWithMoreThan20
REM-CAST 3
REM-MOVIE 4
LINK-CAST-TO-MOVIE 0 0
LINK-CAST-TO-MOVIE 1 1
LINK-CAST-TO-MOVIE 2 0
SHOW-MOVIE 0
SHOW-MOVIE 1
SHOW-CAST 0
SHOW-CAST 1
SHOW-CAST 2
SHOW-CAST 3
FILTER-MOVIES-BY-TITLE The_
FILTER-MOVIES-BY-DATE > 2000
FILTER-MOVIES-BY-QUALITY 1080p
خروجی نمونه ۲
added successfully 0
added successfully 1
invalid title
added successfully 2
added successfully 3
invalid name
invalid name
invalid name
invalid name
invalid cast id
invalid movie id
invalid cast id
invalid cast id
invalid cast id
{title:"Hezarpa", date:"2018", quality:"1080p", casts:[]}
{title:"Dracula", date:"2016", quality:"720p", casts:[]}
invalid cast id
invalid cast id
invalid cast id
invalid cast id
[2]
[0, 1, 3]
[0]
ارسال پاسخ برای این سؤال