QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 1024 MB Total points: 100 Difficulty: [show] Hackable ✓

#18986. الوسيط

Statistics

لمجموعة متعددة العناصر $S=\{x_0,x_1,\ldots,x_{m-1}\}$ حجمها $m$، لتكن نتيجة ترتيب جميع عناصرها تنازليًا $y_0\geq y_1\geq\cdots\geq y_{m-1}$. نعرّف وسيطها $\mathrm{Median}(S)$ بأنه العنصر الأكبر ذي الرتبة $\lceil m/2\rceil$، أي $\mathrm{Median}(S)=y_{\lceil m/2\rceil-1}$. انتبه: قد يختلف تعريف الوسيط في هذه المسألة عن التعريف المعتاد.

أُعطيت سلسلة $[a_0,a_1,\ldots,a_{n-1}]$ طولها $n$، وعدد صحيح موجب $k$، حيث $k\leq n$. نعرّف تقسيمًا كما يلي: اختر سلسلة متزايدة من الفهارس طولها $k-1$، تحقق $0<b_1<\cdots<b_{k-1}<n$، فتقسم السلسلة الأصلية إلى $k$ مقطعًا، ومجالات فهارسها على التوالي $[0,b_1),[b_1,b_2),\ldots,[b_{k-1},n)$.

نعرّف توازن تقسيم ما كما يلي: احسب لكل مقطع وسيط المجموعة المتعددة المكونة من جميع عناصره، ثم يكون وسيط المجموعة المتعددة المكونة من هذه الوسائط $k$ هو توازن التقسيم. وبصورة رسمية، للتقسيم $b_1,\ldots,b_{k-1}$، ضع $b_0=0$ و$b_k=n$. وليكن وسيط جميع عناصر المقطع رقم $i$، حيث $0\leq i<k$، هو $c_i=\mathrm{Median}(\{a_{b_i},a_{b_i+1},\ldots,a_{b_{i+1}-1}\})$. عندئذ يكون توازن التقسيم $\mathrm{Median}(\{c_0,\ldots,c_{k-1}\})$.

أوجد أكبر توازن بين جميع التقسيمات.

تفاصيل التنفيذ

لا تحتاج إلى تنفيذ الدالة main، ولا ينبغي لك تنفيذها.

يجب أن يتضمن الملف المصدري الذي تسلمه الترويسة median.h، وذلك بإضافة الكود التالي في بدايته:

#include "median.h"

يجب تنفيذ الدالتين التاليتين في الملف المصدري median.cpp الذي تسلمه:

void init(int c, int t);
  • يمثل $c,t$ رقم حالة الاختبار وعدد مجموعات البيانات على التوالي. ويعني $c=0$ أن حالة الاختبار مثال.
  • لكل حالة اختبار، يستدعي برنامج التقييم هذه الدالة مرة واحدة بالضبط عند بدء تشغيل البرنامج.
int median(int n, int k, std::vector<int> a);
  • تمثل $n,k,a$ طول السلسلة، وعدد مقاطع التقسيم، والسلسلة المعطاة على التوالي.
  • يجب أن تعيد هذه الدالة أكبر توازن ممكن.
  • لكل حالة اختبار، يستدعي برنامج التقييم هذه الدالة $t$ مرة بالضبط.

الملف template_median.cpp في دليل المسألة كود نموذجي مقدم لك، ويمكنك الرجوع إليه لتنفيذ كودك الخاص.

كيفية اختبار برنامجك

يمكنك استخدام الأمر التالي في دليل المسألة لترجمة البرنامج وإنشاء ملف تنفيذي:

g++ grader.cpp median.cpp -o median -O2 -std=c++14 -static

بالنسبة إلى الملف التنفيذي الناتج median:

سيقرأ من الإدخال القياسي بيانات بالصيغة التالية:

  • يحتوي السطر الأول على عددين صحيحين غير سالبين $c,t$.
  • تليه مجموعات البيانات بالترتيب. لكل مجموعة بيانات، يحتوي السطر الأول على عددين صحيحين موجبين $n,k$، ويحتوي السطر الثاني على $n$ عدد صحيح موجب $a_0,a_1,\ldots,a_{n-1}$.

سيكتب الملف التنفيذي إلى الإخراج القياسي بيانات بالصيغة التالية:

  • لكل مجموعة بيانات، يخرج سطرًا يحتوي على عدد صحيح موجب واحد يمثل أكبر توازن ممكن.

أمثلة

الإدخال 1

0 2
10 4
6 5 1 9 2 3 10 7 4 8
10 5
5 7 3 10 8 2 9 1 6 4

الإخراج 1

9
8

ملاحظة

للمجموعة الأولى، أحد التقسيمات ذات أكبر توازن هو $b_1=3,b_2=5,b_3=7$، ويقسم السلسلة الأصلية إلى أربعة مقاطع $[6,5,1],[9,2],[3,10],[7,4,8]$. وسائط عناصر هذه المقاطع هي $5,9,10,7$ على التوالي، لذلك توازن هذا التقسيم هو $\mathrm{Median}(\{5,9,10,7\})=9$.

للمجموعة الثانية، أحد التقسيمات ذات أكبر توازن هو $b_1=2,b_2=4,b_3=6,b_4=8$، ويقسم السلسلة الأصلية إلى خمسة مقاطع $[5,7],[3,10],[8,2],[9,1],[6,4]$. وسائط عناصر هذه المقاطع هي $7,10,8,9,6$ على التوالي، لذلك توازن هذا التقسيم هو $\mathrm{Median}(\{7,10,8,9,6\})=8$.

مثال 2

راجع الملفين median/median2.in وmedian/median2.ans في دليل المتسابق.

يحقق هذا المثال قيود حالة الاختبار $6$.

مثال 3

راجع الملفين median/median3.in وmedian/median3.ans في دليل المتسابق.

يحقق هذا المثال قيود حالة الاختبار $9$.

مثال 4

راجع الملفين median/median4.in وmedian/median4.ans في دليل المتسابق.

يحقق هذا المثال قيود حالة الاختبار $14$.

مثال 5

راجع الملفين median/median5.in وmedian/median5.ans في دليل المتسابق.

يحقق هذا المثال قيود حالات الاختبار $18\sim20$.

القيود

لتكن $N$ مجموع قيم $n$ لجميع مجموعات البيانات في حالة اختبار واحدة. لجميع مجموعات البيانات، يتحقق ما يلي:

  • $1\leq t\leq 20$.
  • $5\leq n\leq 10^6$، و$2\leq k\leq n$، و$N\leq 10^6$.
  • لكل $0\leq i<n$، يكون $1\leq a_i\leq n$.
أرقام حالات الاختبار $N\leq$ $n\leq$ $k$ خصائص خاصة
$1,2$ $40$ $20$ $\leq n$ لا شيء
$3\sim5$ $800$ $80$ A
$6$ لا شيء
$7,8$ $8000$ $800$ A
$9$ لا شيء
$10$ $2\times10^5$ $2\times10^5$ $=2$
$11$ $=3$
$12,13$ $=5$
$14$ $\leq 10$
$15$ $\equiv 0\pmod{2}$
$16,17$ $10^6$ $10^6$ $>5$
$18\sim20$ $\leq n$

الخاصية الخاصة A: لكل $0\leq i<n$، يكون $a_i\leq 2$.

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.