پیشنهاد موسیقی


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

شرکت beeptunes، در حال راه‌اندازی یک سیستم هوش مصنوعی برای پیشنهاد موسیقی به کاربرهاست. اکنون بخش هوش این سیستم به انتها رسیده، اما هنوز رابط درستی بین داده‌های موجود و بخش هوش سیستم وجود ندارد!

دو نوع داده جهت سیستم پیشنهاد موسیقی قابل استفاده است:

  1. داده‌های مربوط به هر کاربر. این داده‌ها شامل نام کاربری، سن، شهر و لیست نام آلبوم‌هاییست که این کاربر خریداری کرده است.
  2. داده‌های مربوط به هر آلبوم. این‌داده‌ها شامل نام آلبوم، نام خواننده، سبک و تعداد ترک‌های موسیقی این آلبوم هستند.

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

  1. درخواست تعداد آهنگ‌هایی که یک کاربر از یک خواننده خریده‌است.
  2. درخواست تعداد آهنگ‌هایی که یک کاربر از یک سبک خریده‌است.
  3. درخواست تعداد آهنگ‌هایی که کاربرهای با یک سن خاص، از یک خواننده خریده‌اند.
  4. درخواست تعداد آهنگ‌هایی که کاربرهای با یک سن خاص، از یک سبک خریده‌اند.
  5. درخواست تعداد آهنگ‌هایی که کاربرهای با یک شهر خاص، از یک خواننده خریده‌اند.
  6. درخواست تعداد آهنگ‌هایی که کاربرهای با یک شهر خاص، از یک سبک خریده‌اند.

البته این سیستم خیلی هم باهوش نیست و ممکن است در سوال‌هایی که می‌پرسد نام کاربری، یا نام خواننده و یا هریک از فیلدهای مسئله اشتباه باشد و واقعاً در بین داده‌های سایت موجود نباشد.

حال به سراغ شما آمده‌ایم تا این رابط را برای ما بنویسید! برنامه‌ای بنویسید که داده‌های شرکت را بصورت Yaml دریافت کند، سپس به درخواست‌های از انواع مختلف پاسخ بدهد.

برای آشنایی با فرمت Yaml می‌توانید به مثال‌های سوال (و البته اینترنت!) مراجعه کنید. دقت کنید که ورودی‌های این سوال حالت خاص و بسیار ساده‌ای از Yaml می‌باشد.

ورودی🔗

در خط اول ورودی عدد nn‌ آمده‌است که نمایانگر تعداد داده‌های از نوع کاربر است. سپس این nn داده بصورت Yaml می‌آیند.

پس از آن، در خط بعدی عدد mm آمده‌است که نمایانگر تعداد داده‌های از نوع آلبوم است. سپس این mm داده بصورت Yaml می‌آیند.

در این Yamlها، فیلدهای نام کاربری، سن، شهر و لیست آلبوم‌ها برای هر کاربر به همین ترتیب می‌آیند و با کلیدهای زیر مشخص می‌شوند:

  • name
  • age
  • city
  • albums

همچنین فیلدهای نام آلبوم، نام خواننده، سبک و تعداد ترک‌های یک آلبوم به همین ترتیب می‌آیند و با کلیدهای زیر مشخص می‌شوند:

  • name
  • singer
  • genre
  • tracks

در فیلدهای age و tracks حتماً یک عدد بین ۱ تا ۳۰ می‌آید و در دیگر فیلدها رشته‌های متشکل از حداکثر ۱۰ کاراکتر از حروف کوچک انگلیسی می‌آید.

و فرمت اعداد و رشته‌ها و فواصل، دقیقاً به شکل ورودی‌های نمونه خواهد بود. هر تب نیز با ۲ تا فاصله (space) مشخص می‌شود.

سپس در خط بعدی عدد qq آمده‌ است که نمایانگر تعداد درخواست‌هایی است که برنامه شما باید به آن‌ها پاسخ دهد. سپس در هریک از qq سطر بعدی، ابتدا شماره نوع درخواست و سپس توضیح آن می‌آید که به یکی از ۶ شکل زیر است:

  • 1 user singer
  • 2 user genre
  • 3 age singer
  • 4 age genre
  • 5 city singer
  • 6 city genre

دقت کنید که ممکن است هریک از اطلاعات داخل پرسش‌ها (از قبیل نام کاربر، نام خواننده، ...) در ورودی موجود نباشد.

1n,m,q1001 \le n, m, q \le 100

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

تضمین می‌شود که آلبوم‌ها و کاربرهای مختلف، نام‌های مختلف دارند. همچنین هیچیک از کلیدهای توضیحی (مانند name و albums و ...) بعنوان نام کاربر، آلبوم، خواننده، سبک و یا شهر در ورودی نمی‌آیند.

خروجی🔗

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

مثال🔗

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

1
- name: ali
  age: 12
  city: bushehr
  albums:
    - bidad
    - blaze
2
- name: bidad
  singer: shajarian
  genre: classic
  tracks: 10
- name: blaze
  singer: ghorbani
  genre: pop
  tracks: 9
1
1 ali ghorbani
Plain text

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

9
Plain text

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

2
- name: gholi
  age: 18
  city: tehran
  albums:
    - tekunbede
    - barf
    - hoyad
- name: mehdi
  age: 20
  city: mashhad
  albums:
    - eclipse
    - barf
    - hoyad
4
- name: eclipse
  singer: malmsteen
  genre: classic
  tracks: 10
- name: barf
  singer: beeptunes
  genre: pop
  tracks: 22
- name: tekunbede
  singer: beeptunes
  genre: pop
  tracks: 14
- name: hoyad
  singer: hoyad
  genre: persian
  tracks: 5
12
1 gholi hoyad
1 gholi beeptunes
2 gholi rock
2 mehdi pop
3 20 beeptunes
4 18 malmsteen
4 19 malmsteen
5 tehran malmsteen
5 mashhad malmsteen
6 tehran pop
6 ghazvin rock
1 mehdi shajarian
Plain text

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

5
36
0
22
22
0
0
0
10
36
0
0
Plain text