QOJ.ac

QOJ

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

#18986. Median

Statistics

Für eine Multimenge $S=\{x_0,x_1,\ldots,x_{m-1}\}$ der Größe $m$ seien ihre Elemente absteigend als $y_0\ge y_1\ge\cdots\ge y_{m-1}$ sortiert. Ihr Median $\operatorname{Median}(S)$ ist als das $\lceil m/2\rceil$-größte Element definiert, also $\operatorname{Median}(S)=y_{\lceil m/2\rceil-1}$. Beachte, dass die Mediandefinition dieser Aufgabe von der üblichen Definition abweichen kann.

Gegeben sind eine Folge $[a_0,a_1,\ldots,a_{n-1}]$ der Länge $n$ und eine positive ganze Zahl $k\le n$. Eine Aufteilung ist wie folgt definiert: Wähle eine streng wachsende Indexfolge $0<b_1<\cdots<b_{k-1}<n$ der Länge $k-1$. Dadurch wird die ursprüngliche Folge in $k$ Abschnitte mit den Indexintervallen $[0,b_1),[b_1,b_2),\ldots,[b_{k-1},n)$ aufgeteilt.

Die Ausgewogenheit einer Aufteilung definieren wir so: Berechne für jeden Abschnitt den Median der Multimenge seiner Elemente. Der Median der Multimenge dieser $k$ Mediane ist die Ausgewogenheit der Aufteilung. Formal setzen wir für die Aufteilung $b_1,\ldots,b_{k-1}$ die Grenzen $b_0=0$, $b_k=n$. Für Abschnitt $i$ mit $0\le i<k$ sei $c_i=\operatorname{Median}(\{a_{b_i},a_{b_i+1},\ldots,a_{b_{i+1}-1}\})$. Dann ist die Ausgewogenheit der Aufteilung $\operatorname{Median}(\{c_0,\ldots,c_{k-1}\})$.

Bestimme die größtmögliche Ausgewogenheit unter allen Aufteilungen.

Implementierungsdetails

Du musst und sollst keine Funktion main implementieren.

Stelle sicher, dass deine eingereichte Quelldatei den Header median.h einbindet. Füge dazu am Anfang die folgende Zeile ein:

#include "median.h"

In deiner eingereichten Quelldatei median.cpp musst du die folgenden beiden Funktionen implementieren:

void init(int c, int t);
  • $c,t$ geben die Testfallnummer und die Anzahl der Testdatensätze an. $c=0$ bedeutet, dass es sich um einen Beispieltestfall handelt.
  • Für jeden Testfall ruft das Bewertungsprogramm diese Funktion zu Beginn der Programmausführung genau einmal auf.
int median(int n, int k, std::vector<int> a);
  • $n,k,a$ sind die Folgenlänge, die Anzahl der Abschnitte und die gegebene Folge.
  • Die Funktion muss die größtmögliche Ausgewogenheit zurückgeben.
  • Für jeden Testfall ruft das Bewertungsprogramm diese Funktion genau $t$ Mal auf.

Die Datei template_median.cpp im Aufgabenverzeichnis enthält Beispielcode, an dem du dich bei deiner Implementierung orientieren kannst.

Dein Programm testen

Im Aufgabenverzeichnis kannst du mit folgendem Befehl eine ausführbare Datei erzeugen:

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

Für die erzeugte ausführbare Datei median gilt:

  • Sie liest die Daten im folgenden Format von der Standardeingabe. Die erste Zeile enthält zwei nichtnegative ganze Zahlen $c,t$. Es folgen die einzelnen Testdatensätze. Für jeden Datensatz enthält die erste Zeile zwei positive ganze Zahlen $n,k$, die zweite $n$ positive ganze Zahlen $a_0,a_1,\ldots,a_{n-1}$.
  • Sie schreibt die Daten im folgenden Format auf die Standardausgabe: Für jeden Datensatz wird eine Zeile mit einer positiven ganzen Zahl ausgegeben, der größtmöglichen Ausgewogenheit.

Beispiele

Eingabe 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

Ausgabe 1

9
8

Hinweis

Für den ersten Datensatz ist eine Aufteilung mit größtmöglicher Ausgewogenheit $b_1=3$, $b_2=5$, $b_3=7$. Sie teilt die Folge in die 4 Abschnitte $[6,5,1]$, $[9,2]$, $[3,10]$, $[7,4,8]$. Ihre Mediane sind der Reihe nach $5,9,10,7$. Daher ist die Ausgewogenheit dieser Aufteilung $\operatorname{Median}(\{5,9,10,7\})=9$.

Für den zweiten Datensatz ist eine Aufteilung mit größtmöglicher Ausgewogenheit $b_1=2$, $b_2=4$, $b_3=6$, $b_4=8$. Sie teilt die Folge in die 5 Abschnitte $[5,7]$, $[3,10]$, $[8,2]$, $[9,1]$, $[6,4]$. Ihre Mediane sind der Reihe nach $7,10,8,9,6$. Daher ist die Ausgewogenheit dieser Aufteilung $\operatorname{Median}(\{7,10,8,9,6\})=8$.

Beispiel 2

Siehe median/median2.in und median/median2.ans im Teilnehmerverzeichnis.

Dieses Beispiel erfüllt die Einschränkungen von Testfall $6$.

Beispiel 3

Siehe median/median3.in und median/median3.ans im Teilnehmerverzeichnis.

Dieses Beispiel erfüllt die Einschränkungen von Testfall $9$.

Beispiel 4

Siehe median/median4.in und median/median4.ans im Teilnehmerverzeichnis.

Dieses Beispiel erfüllt die Einschränkungen von Testfall $14$.

Beispiel 5

Siehe median/median5.in und median/median5.ans im Teilnehmerverzeichnis.

Dieses Beispiel erfüllt die Einschränkungen der Testfälle $18\text{–}20$.

Beschränkungen

$N$ sei die Summe aller Werte $n$ innerhalb eines einzelnen Testfalls. Für alle Testdaten gilt:

  • $1\le t\le20$;
  • $5\le n\le10^6$, $2\le k\le n$, $N\le10^6$;
  • für jedes $0\le i<n$ gilt $1\le a_i\le n$.
Testfallnummern $N\le$ $n\le$ $k$ Besondere Eigenschaften
$1,2$ $40$ $20$ $\le n$ Keine
$3\text{–}5$ $800$ $80$ A
$6$ Keine
$7,8$ $8000$ $800$ A
$9$ Keine
$10$ $2\times10^5$ $2\times10^5$ $=2$
$11$ $=3$
$12,13$ $=5$
$14$ $\le10$
$15$ $\equiv0\pmod2$
$16,17$ $10^6$ $10^6$ $>5$
$18\text{–}20$ $\le n$

Besondere Eigenschaft A: Für jedes $0\le i<n$ gilt $a_i\le2$.

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.