.لینک‌های مفید برای شرکت در مسابقه:

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

استخدام در ترب


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

علی که حسابی از کار کشاورزی سود کرده... تصمیم گرفت یک شرکت با هدف موتور جست و جوی کالا، تاسیس کند و به یاد مرحوم ترب، نام آن را ترب گذاشته...

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

در این سوال یک دنباله از اعداد طبیعی مانند a1,a2,a3,...,an a_1, a_2, a_3, ..., a_n\ آمده است و از تربچه خواسته شده تا حاصل عبارت زیر را محاسبه کند. i=1nj=1naiaj \sum_{i=1}^{n}\sum_{j=1}^{n}\lfloor\frac{a_i}{a_j}\rfloor

به تربچه کمک کنید تا این عبارت را محاسبه کند و در شرکت ترب استخدام شود.

ورودی🔗

در سطر اول ورودی عدد صحیح nn که نشان دهنده تعداد اعداد دنباله است و در سطر دوم nn عدد صحیح با فاصله آمده که عدد iiام نشان دهنده مقدار aia_i است.

1n,ai100 0001 \le n, a_i \le 100\ 000

خروجی🔗

در تنها سطر خروجی، یک عدد صحیح که پاسخ مسئله است را چاپ کنید.

مثال🔗

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

3
1 2 3
Plain text

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

9
Plain text

حاصل عبارت برابر است با: 11+12+13+21+22+23+31+32+33=\lfloor\frac{1}{1}\rfloor + \lfloor\frac{1}{2}\rfloor + \lfloor\frac{1}{3}\rfloor + \lfloor\frac{2}{1}\rfloor + \lfloor\frac{2}{2}\rfloor + \lfloor\frac{2}{3}\rfloor + \lfloor\frac{3}{1}\rfloor + \lfloor\frac{3}{2}\rfloor + \lfloor\frac{3}{3}\rfloor = 1+0+0+2+1+0+3+1+1=9 1 + 0 + 0 + 2 + 1 + 0 + 3 + 1 + 1 = 9

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

4
1 1 1 1
Plain text

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

16
Plain text

چون همه مقادیر باهم برابر است حاصل عبارت برابر است با: 4×4×11=164 \times 4 \times \lfloor\frac{1}{1}\rfloor = 16

قسمت آموزشی🔗

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

راهنمایی ۱

فرض کنید مقدار aiaj=k\lfloor\frac{a_i}{a_j}\rfloor = k در این صورت داریم kaiaj<k+1kajai(k+1)ajk \leq \frac{a_i}{a_j} < k + 1 \Rightarrow k a_j \leq a_i \leq (k + 1) a_j

مقدار MM را بزرگ ترین عدد آمده در دنباله در نظر بگیرید یعنی: M=max1in{ai}M = \max_{1 \le i \le n}\{ a_i \}

مقدار cntkcnt_k را تعریف می‌کنیم تعداد همه aia_i هایی که ai<ka_i < k باشد.

به راحتی می‌توان مقدار cntkcnt_k را برای همه 1kmax{ai}1 \le k \le max\{a_i\} از مرتبه زمانی O(M)O(M) با استفاده از ایده جمع تجمعی یا partial sum محاسبه کرد.

راهنمایی ۲

مقدار خواسته شده را با حالت بندی روی kkهای مختلف محاسبه می‌کنیم.

i=1nj=1naiaj=j=1nk=1max{ai}k(cnt(k+1)ajcntkaj)\sum_{i=1}^{n}\sum_{j=1}^{n} \lfloor\frac{a_i}{a_j}\rfloor = \sum_{j=1}^{n} \sum_{k=1}^{max\{a_i\}} k(cnt_{(k + 1)a_j} - cnt_{ka_j})

با کمی مشاهده متوجه می‌شویم نیازی نیست مجموع دوم تا انتهای کار محاسبه شود (چرا؟).

و همین که kMajk \leq \frac{M}{a_j} باشید کافی است پس داریم : =j=1nk=1Majk(cnt(k+1)ajcntkaj) = \sum_{j = 1}^{n}\sum_{k = 1}^{\frac{M}{a_j}} k(cnt_{(k + 1)a_j} - cnt_{ka_j})

راهنمایی ۳

به جای مجموع روی اندیس aja_j روی مقدار aja_j مجموع را حساب می‌کنیم یعنی اگر aj=la_j = l باشد داریم:

=l=1Mk=1Mlk(cnt(k+1)ajcntkaj) = \sum_{l = 1}^{M}\sum_{k=1}^{\frac{M}{l}} k(cnt_{(k + 1)a_j} - cnt_{ka_j})

همانطور که می‌دانیم دو مجموع فوق مشابه الگوریتم غربال-اراتستن از مرتبه زمانی O(MlogM)O(M \log{M}) بنابراین کل مسئله از مرتبه زمانی O(n+MlogM)O(n + M \log{M}) حل می‌شود.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.