شش سنگ


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

«تانوس» به‌ دنبال ۶ سنگ بی‌نهایت می‌گردد تا با آن‌ها بازی کند. (اگر فیلم‌های Avengers را دیده باشید کاملاً در جریان هستید.)

تانوس خوشحال

هر کدام از این ۶ سنگ یک نام و یک رنگ دارند. سنگ فضا (space) به رنگ آبی (blue)، سنگ ذهن (mind) به رنگ زرد (yellow)، سنگ واقعیت (reality) به رنگ قرمز (red)، سنگ قدرت (power) به رنگ بنفش (purple)، سنگ زمان (time) به رنگ سبز (green) و سنگ روح (soul) به رنگ نارنجی (orange) است.

اما «تانوس» کوررنگی دارد و از شما می‌خواهد که با دریافت نام هر سنگ، رنگ آن را به او بگویید.

ورودی🔗

در تنها سطر ورودی یک رشته از حروف کوچک انگلیسی آمده که نام یکی از ۶ سنگ بی‌نهایت است.

خروجی🔗

در تنها سطر خروجی یک رشته از حروف کوچک انگلیسی چاپ کنید که رنگ سنگ ورودی داده شده را چاپ می‌کند.

مثال‌ها🔗

ورودی نمونه ۱🔗

time
Plain text

خروجی نمونه ۱🔗

green
Plain text

سنگ زمان به رنگ سبز است.

ورودی نمونه ۲🔗

power
Plain text

خروجی نمونه ۲🔗

purple
Plain text

سنگ قدرت به رنگ بنفش است.

اشتباهات متداول
چک کردن شرایط ورودی مسئله

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

if 1 <= n <= 100:
    # answer of problem
else:
    # print('invalid input')
Python
ابتدا همه‌ی ورودی را گرفتن و در نهایت همه‌ی خروجی را چاپ کردن

شما می‌توانید لابه‌لای دریافت ورودی، خروجی دهید. پس نیازی نیست ابتدا همه‌ی ورودی‌ها را دریافت کنید و در نهایت همه‌ی خروجی‌ها را چاپ کنید. مخصوصاً برای سوالاتی که باید به چندین سوال پاسخ دهید، می‌توانید دو قسمت ورودی و خروجی را کاملاً مستقل در نظر بگیرید و مطمئن باشید تداخلی پیش نمی‌آید.

چاپ کردن موارد اضافه برای دریافت ورودی

لطفاً از چاپ کردن موارد اضافه مثل please enter a number برای دریافت ورودی پرهیز کنید. برای مثال در زبان پایتون نباید بنویسید:

input('please enter:')
Python
چند فایلی کد زدن

برای زبان‌هایی مثل جاوا نباید در بالای کد شما آدرس پکیج داده شود. برای مثال در بالای کد خود نباید بنویسید:

package ir.quera.contest;
Java
استفاده از چند Scanner برای دریافت ورودی

در زبان جاوا، باید فقط یک شئ از جنس Scanner تعریف کنید و همه‌ی ورودی‌ها را با آن دریافت کنید.

اطلاعات کوه‌نوردی


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

امین در خواب می‌بیند که به ارتفاعات یک میلیون کیلومتری از سطح دریا قرار دارد و تصمیم می‌گیرد که nn دقیقه به راه خود ادامه دهد. پس از راه افتادن، در دقیقه‌ی iiام به ارتفاع hih_i می‌رسد، اما متاسفانه مقدار hih_i را نمی‌داند و تنها اطلاعاتی که می‌تواند محاسبه کند، اختلاف ارتفاعش نسبت به دقیقه‌ی قبل است؛ یعنی di=hihi1d_i = |h_i - h_{i - 1}|\, را می‌داند که did_iها نیز تنها اعداد صحیح ۰، ۱ یا ۲ هستند. او که در مکان اولیه‌اش یک قصر خیالی ساخته بود، می‌خواهد در پایان کوه‌نوردی در نزدیک‌ترین مکان ممکن به قصرش متوقف شود.

امین از شما می‌خواهد با استفاده از مقادیر d1,d2,,dnd_1, d_2, \dots, d_n\,، به او بگویید پس از حرکت‌های به سمت بالا یا پایین به اندازه‌ی did_i، در پایان، کم‌ترین فاصله‌ی ممکن از قصر چقدر است؟

ورودی🔗

در سطر اول ورودی، عدد صحیح و مثبت nn آمده است.

1n1000001 \leq n \leq 100 \, 000

در سطر دوم ورودی، nn عدد صحیح و مثبت d1,d2,,dnd_1, d_2, \dots, d_n\, که با یک فاصله از هم جدا شده‌اند، آمده است.

i=1,2,,n;di{0,1,2}\forall i = 1, 2, \dots, n; \quad d_i \in \{0, 1, 2\}

خروجی🔗

در تنها سطر خروجی، کم‌ترین فاصله ممکن از قصر خیالی امین را چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

5
1 2 1 0 2
Plain text

خروجی نمونه ۱🔗

0
Plain text

اگر به این ترتیب عمل کرده باشد:

  • در دقیقه‌ی ۰ تا ۱، ۱ متر بالا برود و ارتفاعش نسبت به شروع ۱ واحد زیاد شود.
  • در دقیقه‌ی ۱ تا ۲، ۲ متر بالا برود و ارتفاعش نسبت به شروع ۳ واحد زیاد می‌شود.
  • در دقیقه‌ی ۲ تا ۳، ۱ متر پایین برود و ارتفاعش نسبت به شروع ۲ واحد زیاد می‌شود.
  • در دقیقه‌ی ۳ تا ۴، ۰ متر بالا/پایین برود و ارتفاعش نسبت به شروع ۲ واحد زیاد می‌شود.
  • در دقیقه‌ی ۴ تا ۵، ۲ متر پایین برود و ارتفاعش نسبت به شروع ۰ واحد زیاد می‌شود.

در پایان فاصله‌ی امین از قصر ۰ بوده و واضح است که این عدد از ۰ کم‌تر نمی‌شود.

ورودی نمونه ۲🔗

3
1 1 1
Plain text

خروجی نمونه ۲🔗

1
Plain text

رشته‌کوه شناسی


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

امین از تجربه‌ی کوه‌نوردی قبلی یک نقشه به‌دست آورده است. در نقشه‌ی او nn کوه، کنار هم و در یک ردیف قرار داشتند به طوری که ارتفاع هیچ دو کوه مجاوری یک‌سان نبود. او به یک زیردنباله (نه لزوماً متوالی) از کوه‌ها، یک رشته‌کوه می‌گوید اگر هر کوه (به جز دو کوه اول و آخر) از هر دو کوه مجاورش، یا کوتاه‌تر باشد یا بلندتر.

حال از شما qq سوال مختلف پرسیده می‌شود. در هر سوال یک بازه‌ی ll و rr داده می‌شود و از شما می‌پرسیم بلندترین زیردنباله‌ای که رشته‌کوه باشد در بازه‌ی ll تا rr چقدر است؟

ورودی🔗

در سطر اول ورودی، عدد صحیح و مثبت nn که نشان دهنده‌ی تعداد کوه‌هاست، داده می‌شود. 1n1000001 \leq n \leq 100 \, 000

در سطر دوم ورودی، nn عدد صحیح و نامنفی a1,a2,,ana_1, a_2, \dots, a_n\, داده می‌شود که با فاصله از هم جدا شده‌اند و عدد iiام ارتفاع کوه iiام را نشان می‌دهد. 0ai1090 \leq a_i \leq 10^9

در سطر سوم ورودی، عدد صحیح و مثبت qq داده می‌شود که نشان دهنده‌ی تعداد سوالات است. 1q1000001 \leq q \leq 100 \, 000

در qq سطر بعدی، در هر سطر دو عدد صحیح ll و rr که با یک فاصله از هم جدا شده‌اند داده می‌شود و بازه‌ی مورد سوال را نشان می‌دهد.

خروجی🔗

برای هر سوال، طول بزرگ‌ترین زیردنباله‌ از کوه‌ها که تشکیل رشته‌کوه می‌دهند را چاپ کنید.

زیرمسئله‌ها🔗

زیرمسئله نمره محدودیت
۱ ۲۵ n,q100n, q \leq 100
۲ ۵۰ nq1000000nq \leq 1000 \,000
۳ ۵۰ بدون محدودیت اضافه

مثال‌ها🔗

ورودی نمونه ۱🔗

5
1 4 6 3 5
3
1 5
2 4
1 3
Plain text

خروجی نمونه ۱🔗

4
3
2
Plain text
  • در بازه‌ی ۱ تا ۵ یعنی کل اعداد و بزرگ‌ترین رشته‌کوه از حذف کوه دوم بدست می‌آید.
  • در بازه‌ی ۲ تا ۴ همه‌ی کوه‌ها رشته‌کوه هستند.
  • در بازه‌ی ۱ تا ۳ یک رشته کوه به اندازه‌ی دو از حذف کوه دوم بدست می‌آید.

نمایشگر بریل


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

به تازگی یک نمایشگر برای افراد نابینا با همان روش خط بریل اختراع شده که روی آن ۶ برجستگی به‌صورت شکل زیر دارد و به‌صورت اتوماتیک بالا یا پایین بودن برجستگی‌هایش تنظیم می‌شود و می‌تواند کاراکترهای مختلف را نمایش دهد. این نمایشگر برای بالا یا پایین بردن هر برجستگی ۱ واحد انرژی مصرف می‌کند.

حال یک تابلو داریم که روی آن ۱۵تا از این نمایشگرها قرار گرفته است و با کمک آن اعداد ۱ تا ۱۵ رقمی را می‌توانیم نمایش دهیم. توجه کنید مثلاً هنگام نمایش اعداد ۲ رقمی، ۱۳ رقم دیگر همگی هم سطح با تابلو هستند و هیچ برجستگی ندارند و این طور نیست که عدد ۰ را نشان دهند. به این وضعیت از نمایشگر «خاموش» می‌گوییم.

ابتدا نمایشگرها همگی خاموش هستند سپس این تابلو عدد aa را نشان می‌دهد، سپس به a+1a+1 تغییر می‌کند و همینطور ادامه می‌دهد تا عدد bb را نشان دهد و در نهایت کل تابلو خاموش می‌شود. حال از شما می‌خواهیم برنامه‌ای بنویسید که محاسبه کند مجموع انرژی مصرف شده برای کل این فرآیند چقدر است؟

ورودی🔗

ورودی شامل tt سناریو است. 1t100001 \leq t \leq 10\,000

در تنها سطر هر سناریو دو عدد صحیح و نامنفی aa و bb که با یک فاصله از هم جدا شده‌اند آمده و عدد شروع و پایان بازه‌ی نمایش تابلو را نشان می‌دهد.

1ab<10151 \leq a \leq b < 10^{15}

خروجی🔗

خروجی tt سطر دارد و در هر سطر، هزینه‌ی نمایش اعداد بازه‌ی [a,b][a, b] را چاپ کنید.

زیرمسئله‌ها🔗

زیرمسئله نمره محدودیت
۱ ۷۰ ba100000\sum |b - a| \leq 100 \, 000
۲ ۱۰۵ بدون محدودیت اضافه

مثال🔗

ورودی نمونه ۱🔗

3
3 5
102 102
8 12
Plain text

خروجی نمونه ۱🔗

6
12
16
Plain text

سناریو اول:

  • ابتدا خاموش است و سپس عدد ۳ روشن می‌شود. پس ۲ چراغ روشن می‌شود.
  • سپس عدد ۳ به ۴ تغییر می‌کند و در این فرآیند ۱ چراغ روشن می‌شود.
  • سپس عدد ۴ به ۵ تغییر می‌کند و در این فرآیند ۱ چراغ خاموش می‌شود.
  • سپس عدد ۵ خاموش می‌شود و در این فرآیند ۲ چراغ خاموش می‌شود.

سناریو دوم:

  • ابتدا همه تابلو‌ها خاموش است و تابلو اول عدد ۲ را نمایش می‌دهد، (۲ چراغ) تابلو دوم عدد ۰ را نمایش می‌دهد (۳ چراغ) و تابلو سوم عدد ۱ را نمایش می‌دهد. (۱ چراغ) پس در مجموع ۶ چراغ روشن می‌شود.
  • به همین صورت همه ۶ چراغ‌ خاموش می‌شود.

سناریو سوم:

  • ابتدا خاموش است و سپس عدد ۸ روشن می‌شود. پس ۳ چراغ روشن می‌شود.
  • سپس عدد ۸ به ۹ تغییر می‌کند و در این فرآیند ۳ چراغ تغییر می‌کند.
  • سپس عدد ۹ به ۱۰ تغییر می‌کند و در این فرآیند ۲ چراغ تغییر می‌کند (تابلو دوم از حالت خاموش به عدد ۱ تغییر می‌کند و تابلو اول از عدد ۹ به ۰ تغییر می‌کند.).
  • سپس عدد ۱۰ به ۱۱ تغییر می‌کند و در این فرآیند ۴ چراغ تغییر می‌کند.
  • سپس عدد ۱۱ به ۱۲ تغییر می‌کند و در این فرآیند ۱ چراغ تغییر می‌کند.
  • سپس عدد ۱۲ خاموش می‌شود و در این فرآیند ۳ چراغ خاموش می‌شود.

پروازهای روسیه - SQL


کد شما باید روی PostgreSQL قابل اجرا باشد.


در این سوال، بخشی از پایگاه داده مربوط به اطلاعات پرواز کشور روسیه در اختیار شما قرار گرفته است.

جزئیات دیتابیس🔗

داده‌های اولیه برای تست نهایی را از این لینک دانلود کنید.

توضیحات در مورد داده‌های اولیه

در فایل Travel.zip فایلی به اسم initial.sql وجود دارد.

با اجرای این فایل، همه‌ی جداول و سطرهایی که برای تست‌ نهایی مورد استفاده قرار می‌گیرد در پایگاه داده شما ایجاد می‌شود. پیش از اجرای این فایل، حتما پایگاه داده با اسم دلخواه ایجاد کنید و در ابتدای این فایل، کد use YOUR_DB_NAME; را وارد کنید.

توضیحات جداول دیتابیس

ساختار جداول به‌شرح زیر است:

جدول aircraft_data: از این جدول برای نگه‌داری اطلاعات هواپیما‌ها استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
aircraft_code character varying(8) کد هواپیما
model character varying(64) مدل هواپیما
range integer برد هواپیما

جدول airports_data: از این جدول برای نگه‌داری اطلاعات فرودگاه‌ها استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
airport_code character varying(4) کد فرودگاه
airport_name json نام فرودگاه با فرمت JSON
city json شهری که فرودگاه در آن قرار دارد با فرمت JSON
timezone character varying(32) منطقه زمانی فرودگاه

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

نام ستون نوع تعریف
ticket_no character varying(8) شماره بلیط
flight_id integer شناسه پرواز
boarding_no integer شماره کارت پرواز
seat_no character varying(4) شماره صندلی

جدول flights: از این جدول برای نگه‌داری اطلاعات پروازها استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
flight_id integer شناسه پرواز
flight_no character varying(8) شماره پرواز
scheduled_departure character varying(32) زمان حرکت برنامه ریزی شده
scheduled_arrival character varying(32) زمان ورود برنامه ریزی شده
departure_airport character varying(4) کد فرودگاه مبدا
arrival_airport character varying(4) کد فرودگاه مقصد
status character varying(16) وضعیت پرواز
aircraft_code character varying(4) کد هواپیما

جدول seats: از این جدول برای نگه‌داری اطلاعات صندلی‌ها استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
aircraft_code character varying(4) کد هواپیما
seat_no character varying(4) شماره صندلی
fare_conditions character varying(8) کلاس صندلی هواپیما

جدول ticket_flights: از این جدول برای نگه‌داری اطلاعات بلیط‌های هر پرواز استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
ticket_no character varying(16) شماره بلیط
flight_id integer شناسه پرواز
fare_conditions character varying(8) کلاس بلیط هواپیما
amount integer مبلغ بلیط

جدول tickets: از این جدول برای نگه‌داری اطلاعات بلیط‌ها استفاده می‌شود. ساختار این جدول به‌صورت زیر است:

نام ستون نوع تعریف
ticket_no character varying(16) شماره بلیط
book_ref character varying(8) کد مرجع رزرو
passenger_id character varying(16) شناسه مشتری

مطلوبات🔗

۱. تعداد صندلی‌های هر هواپیما به تفکیک کلاس آن‌ها

توضیحات مربوط به کوئری اول

خروجی این کوئری شامل سه ستون با نام‌های aircraft_code و fare_conditions و count است که به ترتیب کد هواپیما، نوع کلاس صندلی و تعداد صندلی‌های موجود در هواپیمای مذکور با کلاس مشخص شده است. در نهایت جدول، باید بر اساس ستون aircraft_code به صورت صعودی و سپس براساس count به صورت نزولی مرتب شود و در صورت برابر بودن این دو ستون بر اساس ستون‌ fare_conditions به صورت صعودی مرتب شود.

۴ سطر اول خروجی شما باید به شکل زیر باشد:

aircraft_code fare_conditions count
319 Economy 96
319 Business 20
320 Economy 120
320 Business 20

۲. مجموع تعداد پرواز‌های کنسل شده در روز‌های مختلف هفته

توضیحات مربوط به کوئری دوم

خروجی این جدول شامل دو ستون با نام‌های day و count‍ است که به ترتیب شامل روز‌های هفته و تعداد پرواز‌های کنسل شده در آن روز هستند. جدول نهایی باید بر اساس ستون count به صورت نزولی و سپس بر اساس ستون day به صورت صعودی مرتب شود.

۲ سطر اول خروجی شما باید به شکل زیر باشد

day count
Wednesday 2
Thursday 1

۳. رتبه‌بندی تعداد مسافر جابه‌جا شده در فرود‌گاه‌ها توسط هواپیما‌های مختلف

توضیحات مربوط به کوئری سوم

جدول خروجی شامل چهار ستون با نام‌های airport و aircraft_model و count و rank است که به ترتیب شامل نام فرود‌گاه، مدل هواپیما، تعداد مسافرانی که توسط این هواپیما یا به این فرودگاه آمدند یا از این فرودگاه رفتند ( طبیعتا پرواز‌های کنسل شده نباید حساب شوند)، است و رتبه این هواپیما در بین تمام هواپیما‌ها که در این فرودگاه تردد کردند. دقت کنید که رتبه‌بندی بر اساس تعداد دفعات تردد (ستون count) به این صورت محاسبه می‌شود که اگر دو هواپیما با بیشترین count، یکسان بودند هردو رتبه یک می‌شوند و هواپیما بعدی رتبه‌اش دو می‌شود. جدول نهایی، باید به ترتیب بر اساس ستون‌های airport و rank و aircraft_model به صورت صعودی مرتب باشد.

توجه ۱: لازم به ذکر است برای نام شهر‌ها، باید از نام انگلیسی که در JSON مربوطه وجود دارد، استفاده کنید.

۴ سطر اول خروجی شما باید به شکل زیر باشد.

airport aircraft_model count rank
Abakan Airport Cessna 208 Caravan 435 1
Abakan Airport Airbus A319-100 405 2
Anapa Vityazevo Airport Boeing 737-300 2765 1
Anapa Vityazevo Airport Sukhoi Superjet-100 2017 2

۴. فاصله زمانی شهر‌های مختلف

توضیحات مربوط به کوئری چهارم

جدول خروجی شامل سه ستون با نام‌های city1 و city2 و time_dist است که به ترتیب شهر‌های دو سر مسیر و فاصله زمانی شهر‌هاست. جدول نهایی باید بر اساس ستون time_dist به صورت نزولی و سپس بر اساس city1 و city2 به صورت صعودی مرتب باشد. توجه کنید که هر زوج شهر باید یک بار تکرار شود و همچنین از لحاظ ترتیب الفبایی بایدcity1 نسبت به city2 مقدم باشد.

توجه: فاصله زمانی شهر‌ها برابر است با میانگین فاصله زمانی بین فرودگاه‌های آن دو شهر و فاصله زمانی دو فرودگاه برابر است با میانگین اختلاف زمان حرکت و ورود برنامه‌ریزی شده در بلیط‌های مختلفی که برای این دو فرود‌گاه وجود دارد (دقت کنید که بلیط‌های کنسل شده هم باید حساب شوند):

time distance(c1,c2)=Averagea1c1,a2c2 {time distance(a1,a2)} time\ distance(c_1, c_2) = Average_{a_1\in c_1, a_2\in c_2}\ \{time\ distance(a_1, a_2)\} time distance(a1,a2)=Averagefflights {f.scheduled_arrivalf.scheduled_departure} time\ distance(a_1, a_2) = Average_{f\in flights}\ \{f.scheduled\_arrival - f.scheduled\_departure\}

۳ سطر اول خروجی شما باید به شکل زیر باشد.

city1 city2 time_dist
Moscow Petropavlovsk 530
Moscow Yuzhno-Sakhalinsk 527.5
Magadan Mineralnye Vody 525

روش پیاده‌سازی🔗

در یک فایل با نام code.sql کد خود را قرار دهید و آن را فشرده (zip ) کنید و در سایت بارگذاری نمایید. کد شما باید به صورت زیر باشد(نام فایل zip مهم نیست).

-- Section1
   Your first query here
-- Section2
   Your second query here
-- Section3
   Your third query here
-- Section4
   Your fourth query here
SQL

سامانه پیشنهاد کار


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

توضیحات اولیه پروژه🔗

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

تعدادی موقعیت کار داریم و هر موقعیت کار دارای ویژگی‌های «نام موقعیت کار»، «بازه‌ی سنی مورد نیاز این کار»، «وضعیت ساعت‌کاری (تمام‌وقت / پاره‌وقت / پروژه‌ای)»، «حقوق پیشنهادی» و «مهارت‌های مورد نیاز برای این موقعیت کاری» هم‌چنین هر کارجو ویژگی‌های «نام کارجو»، «سن کارجو»، «وضعیت ساعت‌کاری (تمام‌وقت / پاره‌وقت / پروژه‌ای)»، «حقوق مورد انتظار کارجو» و «مهارت‌های این کارجو» را دارد.

دستورها🔗

به شما یک لیست از تمام مهارت‌های موجود داده می‌شود و از شما می‌خواهیم تعدادی کوئری را پیاده‌سازی کنید:

فاز اول🔗

اضافه کردن موقعیت کار (ADD-JOB)
ADD-JOB <NAME> <MINAGE> <MAXAGE> <FULLTIME|PARTTIME|PROJECT> <SALARY>
Plain text

در این کوئری از شما خواسته می‌شود یک موقعیت کاری را به سامانه اضافه کنید. اطلاعاتی که در این کوئری داده می‌شود شامل نام موقعیت شغلی (<NAME>)، محدودیت بازه‌ی سنی کارجو (<MINAGE> و <MAXAGE>)، شرایط زمانی کار (یکی از سه حالت <FULLTIME|PARTTIME|PROJECT>) و میزان حقوق ماهانه (<SALARY>) است.

  • رشته‌ی <NAME> باید فقط شامل حروف کوچک و بزرگ انگلیسی با طولی بین ۱ تا ۱۰ کاراکتر باشد، در غیر این صورت خطای invalid name را چاپ کنید.
  • دو مقدار <MINAGE> و <MAXAGE> باید بین ۰ تا ۲۰۰ (شامل ابتدا و انتها) باشند. هم‌چنین باید <MINAGE> از <MAXAGE> کم‌تر یا مساوی باشد، در غیر این صورت خطای invalid age interval را چاپ کنید. دقت کنید لزومی ندارد این مقادیر صحیح باشند.
  • شرایط زمانی باید دقیقاً یکی از سه کلمه‌ی FULLTIME ،PARTTIME یا PROJECT باشد (به بزرگی حروف دقت کنید) و در غیر این صورت خطای invalid timetype را چاپ کنید.
  • مقدار حقوق باید نامنفی و کم‌تر از ۱،۰۰۰،۰۰۰،۰۰۰ بوده و سه رقم سمت راست آن باید ۰ باشد، در غیر این صورت پیام invalid salary را چاپ کنید.
  • اگر هیچ‌کدام از خطاهای بالا پیش نیامد، پیام job id is <idx> را چاپ کنید و به‌جای <idx> شماره‌ی موقعیت کار را قرار دهید. برای شماره‌گذاری باید از ۱ شروع کرده و یکی یکی زیاد کنید. فقط به موقعیت‌های کاری‌ که به این مرحله می‌رسند و با موفقیت ثبت می‌شوند، شماره نسبت دهید.
اضافه کردن کارجو (ADD-USER)
ADD-USER <NAME> <AGE> <FULLTIME|PARTTIME|PROJECT> <SALARY>
Plain text

در این کوئری شما باید یک کارجو را به سامانه بیفزایید. اطلاعات کارجو شامل نام (<NAME>)، سن (<AGE>)، شرایط زمانی کارجو برای کار (یکی از سه حالت <FULLTIME|PARTTIME|PROJECT>) و حقوق درخواستی ماهانه‌ (<SALARY>) به شما داده می‌شود.

  • رشته‌ی <NAME> باید فقط شامل حروف کوچک و بزرگ انگلیسی با طولی بین ۱ تا ۱۰ کاراکتر باشد. در غیر این صورت خطای invalid name را چاپ کنید.
  • مقدار <AGE> باید بین ۰ تا ۲۰۰ (شامل ابتدا و انتها) باشد، در غیر این صورت خطای invalid age را چاپ کنید. دقت کنید لزومی ندارد این مقدار صحیح باشد.
  • شرایط زمانی باید دقیقاً یکی از سه کلمه‌ی FULLTIME، PARTTIME یا PROJECT باشد (به بزرگی حروف دقت کنید) و در غیر این صورت خطای invalid timetype را چاپ کنید.
  • مقدار حقوق باید نامنفی و کم‌تر از ۱،۰۰۰،۰۰۰،۰۰۰ بوده و سه رقم سمت راست آن باید ۰ باشد، در غیر این صورت پیام invalid salary را چاپ کنید.
  • اگر هیچ کدام از خطاهای بالا پیش نیامد، پیام user id is <idx> را چاپ کنید و به‌جای <idx> شماره‌ی کارجو را قرار دهید. برای شماره‌گذاری باید از ۱ شروع کرده و یکی یکی زیاد کنید. فقط به کارجوهایی که به این مرحله می‌رسند و با موفقیت ثبت می‌شوند، شماره نسبت دهید.
اضافه کردن مهارت به موقعیت کاری (ADD-JOB-SKILL)
ADD-JOB-SKILL <JOB-ID> <SKILL>
Plain text

در این کوئری از شما خواسته می‌شود تا یک مهارت لازم را به یک کار موجود در لیست کارها اضافه نمایید. به موارد زیر توجه کنید:

  • اگر موقعیت کاری با شماره‌ی <JOB-ID> وجود ندارد، خطای invalid index را چاپ کنید. تضمین می‌شود ID داده‌شده، عددی صحیح باشد.
  • اگر مهارتی با نام <SKILL> در لیست اولیه وجود ندارد، خطای invalid skill را چاپ کنید.
  • اگر این مهارت قبلاً به این موقعیت کاری اضافه شده، پیام repeated skill را چاپ کنید.
  • اگر هیچ‌کدام از خطاهای بالا رخ نداد، پیام skill added را چاپ کنید.
اضافه کردن مهارت به کارجو (ADD-USER-SKILL)
ADD-USER-SKILL <USER-ID> <SKILL>
Plain text

در این کوئری از شما خواسته می‌شود تا یک مهارت را به مهارت‌های کارجویی که از پیش ثبت‌نام کرده، اضافه نمایید. به موارد زیر توجه کنید:

  • اگر کارجویی با شماره‌ی <USER-ID> وجود ندارد، خطای invalid index را چاپ کنید. تضمین می‌شود ID داده‌شده، عددی صحیح باشد.
  • اگر مهارتی با نام <SKILL> در لیست اولیه وجود ندارد، خطای invalid skill را چاپ کنید.
  • اگر این مهارت قبلاً به این کاربر اضافه شده، پیام repeated skill را چاپ کنید.
  • اگر هیچ‌کدام از خطاهای بالا رخ نداد، پیام skill added را چاپ کنید.

فاز دوم🔗

گزارش مشاهده (VIEW)
VIEW <USER-ID> <JOB-ID>
Plain text

این دستور یعنی کارجو یک موقعیت کاری را مشاهده کرده است.

  • اگر کارجویی با شماره‌ی <USER-ID> یا موقعیت کاری با شماره‌ی <JOB-ID> وجود نداشت، خطای invalid index را چاپ کنید. تضمین می‌شود IDهای داده‌شده، اعدادی صحیح باشد.
  • در صورتی که خطایی پیش نیامد، پیام tracked را چاپ کنید.
وضعیت موقعیت کار (JOB-STATUS)
JOB-STATUS <JOB-ID>
Plain text
  • اگر موقعیت کاری با شماره‌ی <JOB-ID> وجود ندارد، خطای invalid index را چاپ کنید. تضمین می‌شود ID داده‌شده، عددی صحیح باشد.
  • در غیر این صورت نام موقعیت کاری، سپس با یک -، مجموع تعداد viewهایی که این موقعیت کاری داشته و سپس یک - و برای همه‌ی مهارت‌هایی که در این موقعیت کاری هست در یک (,) ابتدا نام مهارت و سپس تعداد viewهایی کارجوها با این مهارت داشتند را به صورت صعودی بر اساس این تعداد چاپ کنید.
وضعیت کارجو (USER-STATUS)
USER-STATUS <USER-ID>
Plain text

در این دستور، باید مهارت‌ها را به ترتیب نشان دهید. دقت کنید ترتیب مهارت‌ها، بر اساس مشاهدات کارجو تغییر می‌کند.

  • اگر کارجویی با شماره‌ی <USER-ID> وجود ندارد، خطای invalid index را چاپ کنید. تضمین می‌شود ID داده‌شده، عددی صحیح باشد.
  • در غیر این صورت نام کارجو، سپس با یک - و برای همه‌ی مهارت‌هایی که در این کارجو هست در یک (,) ابتدا نام مهارت و سپس تعداد viewهایی برای موقعیت‌های کاری با این مهارت داشتند را به صورت صعودی بر اساس این تعداد چاپ کنید.

فاز سوم🔗

دریافت لیست کارها (GET-JOBLIST)
GET-JOBLIST <USER-ID>
Plain text

در این بخش باید مهارت‌های مورد نیاز شغل‌ها را با مهارت‌های کارجو مقایسه کرده و طبق تابع داده شده در ادامه، امتیاز آن‌ها را محاسبه کنید. سپس بر اساس امتیاز آن‌ها را مرتب کرده و ۵ موقعیت شغلی برتر را با امتیازشان چاپ کنید.

متناسب‌ بودن کارجو با موقعیت کار🔗

امتیاز متناسب بودن یک کارجو و موقعیت کار از بخش‌های زیر به‌دست می‌آید.

امتیاز سن

اگر سن کارجو xx و بازه‌ی سنی مورد نیاز موقعیت کار [l,r][l, r] باشد، امتیاز برابر است با:

{min{rx,xl}lxrxlx<lrxx>r \begin{cases} \min\{r - x, x - l\} & l \leq x \leq r \\ x - l & x \lt l \\ r - x & x \gt r \\ \end{cases}

امتیاز مهارت‌ها

اگر مجموعه‌ی مهارت‌های کارجو AA و مجموعه‌ی مهارت‌های مورد نیاز موقعیت کار BB باشد، امتیاز برابر است با: 3×ABBA3 \times |A \cap B| - |B - A|

امتیاز وضعیت زمان

از روی این جدول امتیاز را تشخیص دهید:

. FULLTIME PARTTIME PROJECT
FULLTIME ۱۰ ۵ ۴
PARTTIME ۵ ۱۰ ۵
PROJECT ۴ ۵ ۱۰
امتیاز حقوق

اگر حقوق مورد انتظار کارجو xx و حقوق پیشنهادی موقعیت کار yy باشد، امتیاز این قسمت برابر است با:

1000max{xy,1}\lfloor\frac{1000}{\max\{|x - y|, 1\}}\rfloor

اگر مجموع امتیازها چهار عدد قبل برابر ss شود، امتیاز هر کاربر s×1000s \times 1000 به‌علاوه‌ی شماره‌ی موقعیت کاری است.

نکات🔗

  • همه‌ی عبارت‌های داخل <> یک رشته به طول حداقل ‍۱ و حداکثر ۱۰ از کاراکترهای رقم، حروف بزرگ و کوچک و . است.
  • اگر چند خطا از خطاهای بالا پیش آمد، تنها خطایی را چاپ کنید که زودتر آمده است.

زیرمسئله‌ها🔗

زیرمسئله نمره محدودیت
۱ ‌ ۱۰۰ فاز اول
۲ ۱۰۰ فاز دوم
۲ ۱۰۰ فاز سوم

ورودی🔗

در سطر اول ورودی، عدد صحیح و مثبت ss آمده است که تعداد مهارت‌ها را نشان می‌دهد. 1s1001 \leq s \leq 100

در سطر دوم ورودی، یک لیست شامل ss رشته متمایز که با یک فاصله از هم جدا شده‌اند آمده است که لیست مهارت‌ها را نشان می‌دهد. در سطر سوم ورودی، عدد صحیح و مثبت qq آمده که تعداد درخواست‌هایی را که باید پوشش دهید، نشان می‌دهد.

1q10001 \leq q \leq 1000

در qq سطر بعدی در هر سطر یک درخواست از انواعی که در صورت سوال آمده به شما داده می‌شود و شما باید کارهای مربوط به آن را انجام دهید.

خروجی🔗

باید در هر سطر از خروجی، پیام‌هایی که توسط دستورها می‌آید را چاپ کنید.

مثال‌ها🔗

تست نمونه فاز ۱

ورودی نمونه ۱🔗

3
codeing hacking talking
14
ADD-USER Amin 72 PARTTIME 52000000
ADD-USER Hamed 30 FULLTIME 52000001
ADD-JOB Quera 10 110 FULLTIME 1000000
ADD-JOB YEK.NET 10 110 PROJECT 30000000
ADD-JOB YEKtaNET 10 110 PARTTIME 1000000
ADD-USER Amin 25 ESHGHI 15000000
ADD-USER Amin 25 PROJECT 15000000
ADD-JOB-SKILL 3 working
ADD-JOB-SKILL 3 talking
ADD-JOB-SKILL 2 talking
ADD-USER-SKILL 2 codeing
ADD-USER-SKILL 1 talking
ADD-USER-SKILL 2 codeing
ADD-USER-SKILL 1 sleeping
Plain text

خروجی نمونه ۱🔗

user id is 1
invalid salary
job id is 1
invalid name
job id is 2
invalid timetype
user id is 2
invalid index
invalid index
skill added
skill added
skill added
repeated skill
invalid skill
Plain text
  • کارجویی به نام «Amin» با شماره‌ی ۱ اضافه می‌شود.
  • «Hamed» نمی‌تواند اضافه شود چون باید سه رقم سمت راست حقوقش ۰ باشد.
  • موقعیت کاری به نام «Quera» با شماره‌ی ۱ اضافه می‌شود.
  • «YEK.NET» حاوی کاراکتر . است که برای نام قابل قبول نیست.
  • موقعیت کاری به نام «YEKtaNET» با شماره‌ی ۲ اضافه می‌شود.
  • شرایط زمانی به نام «ESHGHI» وجود ندارد.
  • کارجوی دیگری با نام «Amin» با شماره‌ی ۲ اضافه می‌شود. (نام تکراری مشکلی نیست.)
  • موقعیت کاری با شماره‌ی ۳ وجود ندارد. (حتی اگر مهارت درست نبود باید به شماره خطا بدهیم.)
  • موقعیت کاری با شماره‌ی ۳ وجود ندارد.
  • مهارت «talking» به شرکت شماره‌ی ۲ یعنی «YEKtaNET» اضافه شد.
  • مهارت «codeing» به کارجوی شماره‌ی ۲ اضافه شد.
  • مهارت «talking» به کارجوی شماره‌ی ۱ اضافه شد.
  • مهارت تکراری نباید اضافه شود.
  • مهارت داده شده باید در لیست اولیه مهارت‌ها باشد.
تست نمونه فاز ۲

ورودی نمونه ۲🔗

3
codeing hacking talking
27
ADD-USER Amin 72 PARTTIME 52000000
ADD-USER Hamed 30 FULLTIME 34000000
ADD-JOB Quera 10 110 FULLTIME 1000000
ADD-JOB YEKtaNET 10 110 PARTTIME 1000000
ADD-USER Amin 25 PROJECT 15000000
ADD-JOB-SKILL 2 talking
ADD-USER-SKILL 2 codeing
ADD-USER-SKILL 1 talking
JOB-STATUS 1
JOB-STATUS 2
JOB-STATUS 3
USER-STATUS 1
USER-STATUS 2
USER-STATUS 3
VIEW 1 1
VIEW 1 2
VIEW 1 1
VIEW 3 1
VIEW 2 1
VIEW 2 4
VIEW 2 0
JOB-STATUS 1
JOB-STATUS 2
JOB-STATUS 3
USER-STATUS 1
USER-STATUS 2
USER-STATUS 3
Plain text

خروجی نمونه ۲🔗

user id is 1
user id is 2
job id is 1
job id is 2
user id is 3
skill added
skill added
skill added
Quera-0-
YEKtaNET-0-(talking,0)
invalid index
Amin-(talking,0)
Hamed-(codeing,0)
Amin-
tracked
tracked
tracked
tracked
tracked
invalid index
invalid index
Quera-4-
YEKtaNET-1-(talking,1)
invalid index
Amin-(talking,1)
Hamed-(codeing,0)
Amin-
Plain text
  • کارجویی به نام «Amin» با شماره‌ی ۱ اضافه می‌شود.
  • کارجویی به نام «Hamed» با شماره‌ی ۲ اضافه می‌شود.
  • موقعیت کاری به نام «Quera» با شماره‌ی ۱ اضافه می‌شود.
  • موقعیت کاری به نام «YEKtaNET» با شماره‌ی ۲ اضافه می‌شود.
  • کارجویی به نام «Amin» با شماره‌ی ۳ اضافه می‌شود.
  • مهارت «talking» به موقعیت کاری شماره‌ی ۲ اضافه می‌شود.
  • مهارت «codeing» به کارجوی شماره‌ی ۲ اضافه می‌شود.
  • مهارت «talking» به کارجوی شماره‌ی ۱ اضافه می‌شود.
  • چون «Quera» هیچ مشاهده‌ای ندارد، پس ۰ چاپ می‌شود و چون هیچ مهارتی ندارد خالی است.
  • چون «YEKtaNET» هیچ مشاهده‌ای ندارد، پس ۰ چاپ می‌شود و چون هیچ کارجویی با مهارت «talking» این موقعیت کاری را ندیده، جلوی آن صفر چاپ می‌شود.
  • موقعیت کاری با شماره‌ی ۳ وجود ندارد.
  • مهارت‌های »Amin» در هیچ موقعیت کاری دیده نشده پس جلوی آن صفر نوشته می‌شود.
  • مهارت‌های »Hamed» در هیچ موقعیت کاری دیده نشده پس جلوی آن صفر نوشته می‌شود.
  • کارجوی «Amin» مهارتی ندارد.
  • مشاهده ثبت می‌شود.
  • مشاهده ثبت می‌شود.
  • مشاهده ثبت می‌شود.
  • مشاهده ثبت می‌شود.
  • مشاهده ثبت می‌شود.
  • موقعیت کاری با شماره‌ی ۴ وجود ندارد.
  • موقعیت کاری با شماره‌ی ۰ وجود ندارد.
  • موقعیت کاری «Quera» مجموعاً ۴ بار دیده شده است.
  • موقعیت کاری «YEKtaNET» یکبار دیده شده و یک نفر مهارت «talking» را داشته است.
  • موقعیت کاری با شماره‌ی ۳ وجود ندارد.
  • مهارت‌های »Amin» و یک موقعیت کاری با مهارت آن دیده شده است.
  • مهارت‌های »Hamed» در هیچ موقعیت کاری دیده نشده پس جلوی آن صفر نوشته می‌شود.
  • کارجوی «Amin» مهارتی ندارد.
تست نمونه فاز ۳

ورودی نمونه ۳🔗

3
codeing hacking talking
20
ADD-USER Amin 72 PARTTIME 52000000
ADD-USER Hamed 30 FULLTIME 34000000
ADD-JOB Quera 10 110 FULLTIME 1000000
ADD-JOB YEKtaNET 10 110 PARTTIME 1000000
ADD-USER Amin 25 PROJECT 15000000
ADD-JOB-SKILL 2 talking
ADD-USER-SKILL 2 codeing
ADD-USER-SKILL 1 talking
VIEW 1 1
VIEW 1 2
VIEW 1 1
VIEW 2 1
VIEW 3 1
VIEW 2 2
VIEW 1 1
VIEW 2 1
GET-JOBLIST 0
GET-JOBLIST 1
GET-JOBLIST 2
GET-JOBLIST 3
Plain text

خروجی نمونه ۳🔗

user id is 1
user id is 2
job id is 1
job id is 2
user id is 3
skill added
skill added
skill added
tracked
tracked
tracked
tracked
tracked
tracked
tracked
tracked
invalid index
(2,51002)(1,43001)
(1,30001)(2,24002)
(2,19002)(1,19001)
Plain text