جمع همه‌ی زیربازه‌ها


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

برنامه‌ای بنویسید که عدد nn و سپس یک دنباله nn-تایی a1,a2,a3,...,ana_1, a_2, a_3, ..., a_n را از ورودی بخواند و سپس مقدار زیر را چاپ کند:

1lrnf(l,r)\sum_{1 \le l \le r \le n} f(l, r)

که f(l,r)f(l, r) را این‌گونه تعریف می‌کنیم:

f(l,r)=i=lraif(l, r) = \sum _{i = l} ^ r a_i

ورودی🔗

در سطر اول ورودی یک عدد nn آمده است و در سطر دوم nn عدد طبیعی آمده است که عدد ii-ام نمایان‌گر aia_i است.

1n500 0001 \le n \le 500\ 000

1ai101 \le a_i \le 10

دقت کنید که این سوال دارای زیرمسئله می‌باشد.

خروجی🔗

برنامه‌ی شما باید تنها یک خروجی چاپ کند که برابر مقدار گفته شده است.

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

زیرمسئله نمره محدودیت
۱ ۲۰ n100n \le 100
۲ ۳۰ n4 000n \le 4\ 000
۳ ۵۰ بدون محدودیت اضافی

مثال🔗

ورودی نمونه🔗

3
1 2 3
Plain text

خروجی نمونه🔗

20
Plain text

f(1,1)=1,f(1,2)=3,f(1,3)=6,f(2,2)=2,f(2,3)=5,f(3,3)=3f(1, 1) = 1 , f(1, 2) = 3, f(1, 3) = 6, f(2, 2) = 2, f(2, 3) = 5, f(3, 3) = 3

ans=1+3+6+2+5+3=20\rightarrow ans = 1 + 3 + 6 + 2 + 5 + 3 = 20

همه‌ی زیرمجموعه‌ها


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

برنامه‌ای بنویسید که با ورودی گرفتن عدد nn، همه‌ی زیرمجموعه‌های مجموعه‌ی {1,2,3,...,n}\{ 1, 2, 3, ..., n \} را چاپ کند. این زیرمجموعه‌ها را به ترتیب الفبایی مرتب کنید؛ یعنی ابتدا عناصر هر زیرمجموعه را مرتب کنید و سپس به آن‌ها مانند کلمات نگاه کنید و به ترتیبی که در لغت‌نامه می‌آیند مرتب‌شان کنید.

تلاش کنید که این کار را تنها به وسیله‌ی تابع بازگشتی انجام دهید؛ یعنی طوری پیاده‌سازی کنید که این مجموعه‌ها به همین ترتیب تولید و چاپ شوند. (به جای این که ابتدا همه را تولید کرده و سپس مرتب کنید.)

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

ورودی🔗

ورودی تنها شامل یک خط است که در آن یک عدد طبیعی nn آمده است. 1n151 \le n \le 15

خروجی🔗

خروجی برنامه‌ی شما باید شامل 2n2^n خط باشد که در هر خط یک زیرمجموعه چاپ شود.

مثال🔗

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

1
Plain text

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

{}
{1}
Plain text

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

3
Plain text

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

{}
{1}
{1, 2}
{1, 2, 3}
{1, 3}
{2}
{2, 3}
{3}
Plain text

سطح نمرات!


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

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

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

حال ما از شما که برنامه نویس خفنی(!) هستید می خواهیم با دریافت نمرات میانگین و واریانس آن ها حساب کنید.

ورودی🔗

در خط اول ورودی آمده nn است. سپس در خط بعدی يک آرایه به طول nn آمده است که نمرات را نشان می دهد.

1n,ai1001 \le n,a_i \le 100

خروجی🔗

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

توجه کنید که جواب شما در صورتی معتبر است که اختلافش با جواب اصلی حداکثر 10610^{-6} باشد.

ورودی نمونه اول🔗

2
1 2
Plain text

خروجی نمونه اول🔗

1.5 0.25
Plain text

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

6
100 90 78 80 83 10
Plain text

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

73.5 859.9166666666666
Plain text

توضیحات🔗

اگر با تعریف واریانس آشنا نیستید این لینک برای شما مفید خواهد بود.

آسونِ سخت


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

به شما یک آرایه از اعداد داده می شود. ما به یک عدد رهنمایی می گوییم اگر هم خودش بر ۶ بخش پذیر باشد هم در حداقل یکی از جایگاهی که در آرایه ظاهر می شود، شماره آن جایگاه بر ۶ بخش پذیر باشد. (بدیهی است که اگر یک عدد در آرایه وجود نداشته باشد آن عدد رهنمایی نیست.)

توجه کنید که اندیس اولین عضو آرایه از ۱ شروع می‌شود. حال که شما فکر می کنید این سوال خیلی ساده است ما آن برای شما سخت می کنیم!

طول کدی که شما ارسال می کنید حداکثر باید یک خط باشد و در آن نمی توانید از ; یا تابع exec استفاده کنید.

حال ما از شما که خودتان را پایتون کار قهاری می دانید می خواهیم تا این سوال را حل کنید.

ورودی🔗

در تنها خط ورودی تعدادی عدد آمده است که آرایه ورودی را نشان می دهد. تعداد اعضای آرایه از ۲۰۰ کم‌تر است.

خروجی🔗

در تنها خط خروجی اعداد رهنمایی را به ترتیب صعودی چاپ کنید به صورتی که بین هر دو عدد دقیقاً یک فاصله باشد. (همچنین اگر هیچ عدد رهنمایی ای وجود ندارد یک خط خالی چاپ کنید.)

توجه کنید که هر عدد رهنمایی دقیقاً یک بار باید در خروجی ظاهر شود.

ورودی نمونه اول🔗

1 2 3 4 5 6 7 8 9 10 11 12
Plain text

خروجی نمونه اول🔗

6 12
Plain text

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

3 4 1 37 21 18 23 21 27 22 43 21
Plain text

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

18
Plain text

نکات🔗

  • یک فایل Zip شامل یک فایل به نام ‍source.py آپلود کنید.
  • نام فایل Zip اهمیت ندارد.

تجارت الکترونیک در کالجستان


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

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

[%day %time] %seller_name sold %item_name to %buyer_name 
Plain text

برای اطلاع از فرمت هر کدام از متغیر ها به ورودی نمونه مراجعه کنید.

حال رهنما که پردازش این داده ها برایش سخت است از شما می خواهد تا آن ها را به شکل زیر ساده سازی کنید.

شما باید به ازای هر روز که در آن حداقل یه خرید انجام شده است رشته زیر را به خروجی اضافه کنید :

%day %stuff_count %people_count
Plain text

که در آن people_count تعداد افرادی است که در آن روز حداقل در یه معامله شرکت داشتند و stuff_count تعداد کالاهای متفاوتی است که در آن روز مبادله شده است.

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

ورودی🔗

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

تضمین می شود که ورودی ها بر اساس زمان از کوچک به بزرگ مرتب شده اند. 1n1051 \le n \le 10^5

خروجی🔗

به ازای هر روز در ورودی رشته ای را که در صورت سوال خواسته شده است را چاپ کنید. (روز ها را باید به ترتیب صعودی چاپ کنید.)

ورودی نمونه اول🔗

8
[2016-01-02 06:28:57] user_16 sold product_17 to user_18
[2016-01-03 00:56:27] user_6 sold product_14 to user_4
[2016-01-08 18:14:42] user_12 sold product_17 to user_8
[2016-01-11 21:35:27] user_9 sold product_2 to user_2
[2016-01-13 00:42:36] user_17 sold product_19 to user_8
[2016-01-14 15:07:15] user_6 sold product_1 to user_18
[2016-01-14 18:07:57] user_4 sold product_3 to user_5
[2016-01-15 15:00:12] user_8 sold product_13 to user_17
Plain text

خروجی نمونه اول🔗

2016-01-02 1 2
2016-01-03 1 2
2016-01-08 1 2
2016-01-11 1 2
2016-01-13 1 2
2016-01-14 2 4
2016-01-15 1 2
Plain text

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

3
[2018-11-02 06:28:57] user_3 sold product_1 to user_4
[2018-11-02 08:56:27] user_1 sold product_2 to user_2
[2018-11-02 09:12:41] user_5 sold product_1 to user_2
Plain text

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

2018-11-02 2 5
Plain text

توضیحات🔗

توجه کنید که روز با همان فرمتی که در ورودی آمده است باید در خروجی چاپ شود.

ماتریس زیبا


صادق که به تازگی جبر خطی پاس کرده‌است کار با ماتریس‌ها را خیلی دوست دارد.

اما از آن‌جایی که محاسبات ماتریسی کمی برایش سخت ‌است و آشنایی زیادی با برنامه‌نویسی ندارد این کار را به شما سپرده‌است:

۳ ماتریس با n سطر و m ستون با نام‌های A و B و C داریم. ماتریس D را به صورتی می‌سازیم که:

D=ABtC D = AB^tC

که BtB^t ترانهاده‌ی ماتریس B است.

صادق معتقد است که هر ماتریس زیبایی خودش را دارد! که به صورت زیر تعریف می‌شود:

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

حال شما باید عدد زیبایی ماتریس D را به‌دست بیاورید.

ورودی🔗

در خط اول اعداد n و m آمده‌است.

1n,m201 \le n, m \le 20

3n خط بعدی، هر خط شامل m عدد است. که n خط اول ماتریس A را تشکیل می‌دهند، n خط بعد ماتریس B را تشکیل می‌دهند و n خط آخر ماتریس C. تضمین می‌شود که درایه‌های ماتریس‌ها اعدادی طبیعی بین ۱ تا ۲۰ هستند.

خروجی🔗

در تنها خط خروجی عدد زیبایی ماتریس D را چاپ کنید.

ورودی نمونه🔗

2 2
1 1
0 1
2 0
-2 2
1 2
1 2
Plain text

خروجی نمونه🔗

1
Plain text

توضیح مثال نمونه🔗

D=ABtC=[1101][2202][1212]=[2424] D= AB^tC= \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 2 & -2 \\ 0 & 2 \end{bmatrix} \begin{bmatrix} 1 & 2 \\ 1 & 2 \end{bmatrix} = \begin{bmatrix} 2 & 4 \\ 2 & 4 \end{bmatrix}

که ستون‌های D بردارهای

[22],[44] \begin{bmatrix} 2 \\ 2 \end{bmatrix} , \begin{bmatrix} 4 \\ 4 \end{bmatrix}

هستند و عدد زیبایی ماتریس D برابر ۱ خواهد شد.

نکات🔗

  • یک فایل Zip شامل یک فایل به نام ‍source.py آپلود کنید.

  • نام فایل Zip اهمیت ندارد.

  • می‌توانید در فایل ارسالی خود از کتاب‌خانه‌ی numpy استفاده کنید.

سامانه درخواست خودرو


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

این سامانه ۲ هدف اصلی دارد:

  • ثبت درخواست برای خودرو
  • گزارش گیری از سامانه

ثبت درخواست برای خودرو🔗

۱. پیاده‌سازی تابع get_distance در کلاس RideRequest: در این تابع باید فاصله‌ی یک ماشین تا محلی که سفر درخواست داده شده را محاسبه کرده و برگردانید.

def get_distance(self, car)
Python
  • صفت location تاپلی به صورت (x, y) است.

۲. پیاده‌سازی تابع find_best_driver در کلاسRideService: مسافر، درخواستی برای خودرو با نوع (car_type) مشخص می‌کند، وظیفه‌ی شما پیدا کردن راننده‌ی آماده به کار (active) با نوع ماشین موردنظر است که حاصل تقسیم امتیاز راننده بر فاصله تا مکان درخواست سفر بیشتر باشد.

def find_best_driver(self, ride_request)
Python
  • تضمین می‌شود که فاصله تا مکان درخواست سفر صفر نیست.

گزارش گیری از سامانه🔗

حتما قبل شروع نوشتن کد، تذکرات انتهای سوال را بخوانید!

۱. ورودی کل شرکت (پولی که از طریق پرداخت وارد شرکت می‌شود)🔗

def total_company_income(payments)
Python

۲. کل مبلغ پرداخت شده توسط مشتری با ایمیل برابر با email🔗

def total_user_payment(payments, email)
Python

۳. راننده‌ با بیشترین تعداد سفر🔗

def driver_with_most_rides(rides):
Python
  • *اگر تعداد سفرها برابر بود به ترتیب حروف الفبا بر اساس نام خانوادگی راننده *

۴. لیست رانندگانی که حداقل یک ماشین با نوع car_type دارند.🔗

def get_drivers(cars, car_type)
Python
  • اگر راننده‌ای بیش از یک ماشین با نوع car_type داشت فقط یک بار در این لیست قرار می‌گیرد.
  • ترتیب رانندگان در این لیست اهمیت ندارد.

تذکرات:🔗

  • هریک از گزارش‌ها را باید در کلاس ReportService و در تابع مربوط به گزارش پیاده‌سازی کنید.
  • به نوع خروجی تابع توجه کنید
    • برای مثال اگر خروجی تابع راننده باشد منظور object راننده می‌باشد و نه اسم یا ایمیل راننده.

آنچه باید آپلود کنید🔗

  • پس از اعمال تغییرات، کل پروژه را Zip کرده و ارسال کنید.
  • نام فایل Zip اهمیت ندارد.

ماشین می‌خره؟


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

شماره نمونه رنگ نوع لاکچری خریداری می‌شود؟
1 قرمز اسپورت خیر بله
2 قرمز اسپورت خیر خیر
3 قرمز اسپورت خیر بله
4 مشکی اسپورت خیر خیر
5 مشکی اسپورت بله بله
6 مشکی اسپورت بله بله
7 مشکی کلاسیک خیر خیر
8 قرمز اسپورت بله بله
9 زرد اسپورت بله خیر
10 زرد کلاسیک خیر بله
11 زرد اسپورت بله خیر
12 زرد کلاسیک بله بله
13 زرد کلاسیک خیر خیر

آقای وثوق برای پیاده‌سازی بیکار ننشسته و توی مطالعاتی که داشته به نظرش رسیده که روش naive bayes می‌تونه کمکش کنه. با استفاده از این دیتاها قراره، naive bayes آموزش داده بشه و آقای وثوق از شما میخواد که کد این naive bayes رو پیاده سازی کنید تا بدونه چه اتومبیل‌هایی بیاره که با احتمال بالاتری به محسن بفروشه؟

برای این کار، کدی که شما پیاده سازی می‌کنید باید یه تابع predict داشته باشه و مطابق با اون چه که در ادامه اومده عمل کنه. همچنین signature این تابع به شکل زیر است:

def predict(color, car_type, luxury)
Python

اجرای تابع🔗

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

انواع رنگ ماشین: BLACK، RED و YELLOW

انواع نوع ماشین: SPORTو CLASSIC

لاکچری بودن: YES یا NO

خروجی تابع🔗

خروجی تابع شما باید شامل ۱ رشته باشد که در آن رشته YES در صورت خریداری ماشین و رشته NO برای عدم خریداری ماشین را برگرداند (return کند).

مثال🔗

اجرای ۱🔗

predict("RED", "SPORT", "NO")
Python

خروجی تابع در اجرای ۱🔗

YES
Plain text

اجرای ۲🔗

predict("BLACK" ,"CLASSIC", "YES")
Python

خروجی تابع در اجرای ۲🔗

YES
Plain text

نکات🔗

  • پاسخ خود را در یک فایل Zip که حتما شامل فایل ‍source.py که تابع predict در آن قرار دارد آپلود کنید.
  • نام فایل Zip اهمیت ندارد.
  • استفاده از لایبرری‌های ماشین لرنینگ در پایتون مجاز نیست. اما استفاده از لایبرری numpy و scipy مجاز است.

آقا رضا و پیشنهادش...


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

شما باید یک الگوریتم شبکه عصبی‌ را پیاده سازی کنید که در آن حروف انگلیسی (A,B,C,D,E,J,K) را از یکدیگر تشخیص دهد. برای این منظور، پروژه را از این لینک دانلود کنید. پروژه شامل فایل‌های آموزشی و یک فایل پایتون ‍source.py است که شما باید تابع predict‍‍ را در آن پیاده سازی کنید. تابع predict‍‍ در ورودی آدرس فایل تست را می‌گیرد و حرفی که در فایل تشخیص داده است را بر می‌گرداند.

مثال🔗

تابع ‍predict در فایل‌های A1, A2, A3 حرف A را تشخیص می‌دهد(return می‌کند) .

نکات🔗

  • تمامی فایل‌های آموزشی پروژه اولیه (به غیر از source.py) در هنگام تصحیح در کنار فایل آپلود شده شما وجود دارند و میتوانید در الگوریتم شبکه عصبی خود از آنها استفاده کنید.
  • پاسخ خود را در یک فایل Zip که حتما شامل فایل ‍source.py که تابع predict در آن قرار دارد آپلود کنید.
  • در این فایل ممکن است فایل‌های دیگری نیز وجود داشته باشد.
  • نام فایل Zip اهمیت ندارد.
  • استفاده از کتابخانه‌های یادگیری ماشین در پایتون مجاز نیست. اما استفاده از کتابخانه‌های numpy و scipy مجاز است.