سلام دوست من 😃👋

به آزمون ورودی دورۀ کارآموزی تابستانۀ Software Engineering کُداِستار خوش اومدی!

هدفِ این آزمون، سنجش شیوۀ برنامه‌نویسی‌ت تو موضوعاتی مثل الگوریتم و شی‌گرایی‌‍ه.


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


برای آشنایی با مسابقه و فرستادن جواب، پیشنهاد می‌کنیم این لینک‌ها رو مطالعه کنی!


در طول مسابقه هر سوالی برات پیش اومد می‌تونی از قسمت "سوال بپرسید" مطرح کنی.

همچنین برای دسترسی به آخرین اخبار و اطلاعیه‌ها (روال مصاحبه و دوره‌های بعدی) حتماً یه سر به کانال تلگرام @code_star بزن.

ما به عنوان تیم آکادمی ستاره برات از صمیم قلب آرزوی موفقیت داریم و امیدواریم بتونیم تو کارآموزی ببینیمت 😉❤️

پیاده‌سازی - ابزار کارآمد


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

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

برای ساده‌سازی مسئله، فرض‌های زیر را در نظر می‌گیریم.

  • شهر ها با شناسه‌ی شهر‍‍ که عددی بین 1 تا c(که در ورودی داده می‌شود) مشخص می‌شوند.
  • افراد با شناسه‌ی فرد که عددی بین 1 تا n(که در ورودی داده می‌شود) مشخص می‌شوند.
  • هر فرد می‌تواند در هیچ، یک و یا بیشتر از یک خانواده قرار داشته‌باشد. (اگر یک فرد در دو خانواده باشد، اعضای آن خانواده با هم خویشاوند محسوب می‌شوند)
  • تاریخ تردد و تاریخ آزمایش به‌صورت عددی بین 1 تا 365 تعریف می‌شود.
  • تردد می‌تواند از یک شهر به شهر دیگر و یا از یک شهر به همان شهر باشد؛ که در حالت اول، شناسه‌ی شهر مبدا و مقصد متفاوت بوده و در حالت دوم شناسه‌ی مبدا و مقصد یکی می‌باشد.
  • در صورتی که آزمایش یک فرد در روز i ام positive شود؛ فرد موردنظر و تمام افرادی که با او در یک خانواده هستند (تمام خانواده‌هایی که فرد در آن‌ها قرار دارد) از روز ‍i ام تا روز i+7 که شامل 8 روز می‌باشد؛ مبتلا به کرونا محسوب می‌شوند.
  • متخلف کسی است که در دوره‌ای که به کرونا مبتلا شده‌است؛ ترددی از یک شهر به شهر دیگر انجام دهد و هر تردد اینگونه‌ی او یک تخلف محسوب ‌می‌شود.(تردد از یک شهر به همان شهر تخلف محسوب نمی‌شود)

ورودی🔗

  1. در خط اول ورودی nn (تعداد افراد مورد بررسی) وارد می‌شود. شناسه‌ی افراد از 1 تا n می‌باشد.
  2. در خط دوم، mm (تعداد خانواده‌ها) وارد می‌شود.
  3. سپس در mm خط بعدی، اعضای خانواده iiم با یک فاصله از هم وارد می‌شوند.
  4. سپس cc (تعداد شهرها) وارد می‌شود. شناسه‌ی شهرها از 1 تا c می‌باشد.
  5. سپس pp (تعداد تردد های ثبت‌شده) وارد می‌شود.
  6. در pp خط بعدی، در هر خط شناسه‌ی فرد، شناسه‌ی شهر مبدا، شناسه‌ی شهر مقصد و تاریخ تردد با یک فاصله از هم به‌صورت زیر وارد می‌شوند.
    personId srcCity dstCity date
    Plain text
  7. سپس tt (تعداد آزمایش‌های کرونا) وارد می‌شود.
  8. در tt خط بعدی، در هر خط شناسه‌ی فرد، نتیجه‌ی آزمایش(که یا positive است یا negative)، شناسه‌ی شهر محل آزمایش و تاریخ آزمایش با یک فاصله از هم به‌صورت زیر وارد می‌شوند.
    personId testResult testCity date
    Plain text
  9. سپس qq (تعداد درخواست‌ها) وارد می‌شود.
  10. در qq خط بعدی، در هر خط یکی از درخواست‌های تعریف‌شده در بالا وارد می‌شود.

0<n100 0 < n \le 100 0<m,c,p,t,q30 0 < m , c , p , t, q\le 30

درخواست ها🔗

پیاده‌سازی هر یک از درخواست‌ها ‍‍۴۰ امتیاز دارد.

  1. درخواست Q1 : این درخواست، افراد با بیشترین تخلف‌ها را به‌‌ترتیب نزولی خروجی می‌دهد و به‌صورت زیر وارد می‌شود.
    Q1 count
    Plain text
    که count تعداد افرادی که باید خروجی بدهد را نشان می‌دهد.(در صورت برابر بودن تخلف های دو فرد، فرد با شناسه‌ی کوچک‌تر، بالاتر قرار می‌گیرد.). این دستور به شکل دیگری نیز وارد می‌شود که دارای تاریخ شروع و تاریخ پایان است؛ که همانند حالت قبلی‌است با این تفاوت که بیشترین تخلف‌ها را از تاریخ شروع تا تاریخ پایان نشان می‌دهد.
    Q1 count fromDate toDate
    Plain text

  1. درخواست Q2 : این درخواست، افراد با بیشترین تعداد آزمایش مثبت خود (نه اعضای خانواده) را به‌ترتیب نزولی خروجی می‌دهد و به‌صورت زیر وارد می‌شود.
    Q2 count
    Plain text
    که count تعداد افرادی که باید خروجی بدهد را نشان می‌دهد.(در صورت برابر بودن تعداد آزمایش مثبت‌های دو فرد، فرد با شناسه‌ی کوچک‌تر، بالاتر قرار می‌گیرد.). این دستور به شکل دیگری نیز وارد می‌شود که دارای تاریخ شروع و تاریخ پایان است؛ که همانند حالت قبلی‌است با این تفاوت که بیشترین تعداد آزمایش مثبت را از تاریخ شروع تا تاریخ پایان نشان می‌دهد.
    Q2 count fromDate toDate
    Plain text

  1. درخواست Q3: این درخواست، شهر هایی که بیشترین آزمایش مثبت را ثبت کرده‌اند؛ به‌ترتیب نزولی خروجی می دهد و به‌صورت زیر وارد می‌شود.
    Q3 count
    Plain text
    که count تعداد شهرهایی که باید خروجی بدهد را نشان می‌دهد.(در صورت برابر بودن آزمایش‌های مثبت دو شهر، شهر با شناسه‌ی کوچک‌تر، بالاتر قرار می‌گیرد.). این دستور به شکل دیگری نیز وارد می‌شود که دارای تاریخ شروع و تاریخ پایان است؛ که همانند حالت قبلی‌است با این تفاوت که شهر هایی که بیشترین آزمایش مثبت را از تاریخ شروع تا تاریخ پایان داشته‌اند؛ نشان می‌دهد.
    Q3 count fromDate toDate
    Plain text

  1. درخواست Q4: این درخواست، با دریافت شناسه‌ی شهر، روزهایی که بیشترین تعداد آزمایش مثبت را داشته‌اند؛ به‌ترتیب نزولی خروجی می‌دهد و به‌صورت زیر وارد می‌شود.‌
    Q4 CityId count
    Plain text
    که count تعداد روزهایی که باید خروجی بدهد را نشان می‌دهد.(در صورت برابر بودن تعداد آزمایش‌های مثبت دو روز، روز با عدد کوچک‌تر، بالاتر قرار می‌گیرد.)

  1. درخواست Q5: این درخواست، روزهایی از سال با بیشترین آمار مبتلا به کرونا را به‌صورت نزولی خروجی می‌دهد(به این نکته توجه شود که هر فرد، از روز آزمایش مثبت تا ۷ روز بعد، مبتلا به کرونا محسوب می‌شود) و به‌صورت زیر وارد می‌شود.
    Q5 count
    Plain text
    که count تعداد روزهایی که باید خروجی بدهد را نشان می‌دهد.(در صورت برابر بودن تعداد مبتلایان دو روز، روز با عدد کوچک‌تر، بالاتر قرار می‌گیرد).

خروجی🔗

برای هر درخواست ابتدا در یک خط نوع درخواست که یکی از مقادیر Q1، Q2، Q3، Q4، یا Q5 می‌باشد نمایش‌داده می‌شود و سپس نتیجه‌ی درخواست که متناسب با نوع درخواست به صورت زیر می‌باشد؛ در خروجی نمایش‌داده می‌شود.

  1. درخواست Q1 : خروجی شامل count خط است که در هر خط ابتدا شناسه‌ی فرد و سپس تعداد تخلف‌های فرد نمایش‌ داده می‌شود.
  2. درخواست Q2 : خروجی شامل count خط است که در هر خط ابتدا شناسه‌ی فرد و سپس تعداد آزمایش‌های مثبت شخص نمایش‌ داده می‌شود.
  3. درخواست Q3 : خروجی شامل count خط است که در هر خط ابتدا شناسه‌ی شهر و سپس تعداد آزمایش‌های مثبت نمایش‌ داده می‌شود.
  4. درخواست Q4 : خروجی شامل count خط است که در هر خط ابتدا روز و سپس تعداد آزمایش‌های مثبت نمایش‌ داده می‌شود.
  5. درخوست Q5 : خروجی شامل count خط است که در هر خط ابتدا روز و سپس تعداد مبتلایان نمایش‌ داده می‌شود.

مثال🔗

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

6
3
1 2
3 4
2 5
3
2
1 1 3 20
1 3 1 30
3
1 negative 1 20
1 positive 2 28
3 negative 1 360
1
Q1 3
Plain text

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

Q1
1 1
2 0
3 0
Plain text
توضیحات نمونه‌ی ۱

فرد با شناسه‌ی 1 در روز 28 ام یک آزمایش مثبت داشته و در تاریخ 30 ام ترددی از یک شهر به شهر دیگر انجام داده‌است که یک تخلف محسوب می ‌شود. با توجه به اینکه بقیه‌ی افراد تخلفی نکرده‌اند اما 3 درخواست شده‌اند؛ افراد به ترتیب صعودی شناسه، نمایش داده می‌شوند.

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

6
3
1 2
3 4
2 5
3
2
1 1 3 20
1 3 1 30
5
1 negative 1 20
1 positive 2 28
3 negative 1 35
2 positive 3 51
5 positive 1 28
4
Q2 4
Q3 2
Q4 2 1
Q5 3
Plain text

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

Q2
1 1
2 1
5 1
3 0
Q3
1 1
2 1
Q4
28 1
Q5
28 3
29 3
30 3
Plain text
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.