QOJ.ac

QOJ

Limite de temps : 4.0 s Limite de mémoire : 512 MB Points totaux : 100

#18422. 車の集会

Statistiques

数直線上に $N$ 台の車があり、それぞれ $0$ から $N-1$ の番号が付けられています。各車の位置 $X[0], X[1], \ldots, X[N - 1]$ と、単位距離あたりの燃料消費率 $C[0], C[1], \ldots, C[N - 1]$ が与えられます。これらはそれぞれ昇順にソートされています。しかし、どの車がどの位置に対応し、どの燃料消費率に対応しているかは分かりません。ただし、各車はちょうど1つの位置ちょうど1つの燃料消費率を持つことが分かっています。

言い換えると、長さ $N$ の2つの順列 $P$ と $Q$ が存在し、$i$ 番目の車は位置 $X[P[i]]$ にあり、燃料消費率 $C[Q[i]]$ を持つことになります。

長さ $N$ の順列とは何か? この問題において、長さ $N$ の順列 $P$ とは、すべての $0 \leq i \leq N-1$ に対して $0 \leq P[i] \leq N-1$ であり、かつすべての $0 \leq i < j \leq N-1$ に対して $P[i] \neq P[j]$ を満たす長さ $N$ の配列のことです。例えば、$[2,1,0]$ は長さ $3$ の順列ですが、$[1,2,3]$ や $[2,0,2]$ は長さ $3$ の順列ではありません

特定の割り当て $(P, Q)$ が与えられたとき、すべての車を点 $y$ に集めるための総燃料コストを $\text{cost}(P, Q, y) = \sum_{i=0}^{N-1} \lvert X[P[i]] -y \rvert \times C[Q[i]]$ と定義します。

整数点 $p$ が与えられたとき、点 $p$ における最悪ケースの燃料コストを、すべての可能な割り当て $(P, Q)$ にわたる総燃料コストの最大値と定義します。すなわち、$\text{worst}(p) = \max\limits_{P,Q} \text{cost}(P, Q, p)$ とします。

あなたのタスクは、最悪ケースの燃料コスト $\text{worst}(p)$ を最小化するような整数点 $p$ を求めることです。$\text{worst}(p)$ の最小値を与える点 $p$ が複数存在する場合は、そのうちのいずれかを報告すればよいです。

実装の詳細

以下の関数を実装してください。

int car_gathering(int N, std::vector<int> X, std::vector<int> C)
  • $N$: 車の台数。
  • $X$: 車の位置を表す長さ $N$ の配列(昇順にソート済み)。
  • $C$: 車の燃料消費率を表す長さ $N$ の配列(昇順にソート済み)。
  • この関数は各テストケースに対してちょうど1回呼び出されます。
  • この関数は、すべての整数点の中で最悪ケースの燃料コストが最小となるような整数点 $p$ を返す必要があります。

制約

  • $1 \le N \le 10\;000\;000$
  • $-10^9 \le X[i] \le 10^9$ (すべての $0 \leq i \leq N - 1$ について)
  • $0 \le C[i] \le 100$ (すべての $0 \leq i \leq N - 1$ について)
  • $X[i] \leq X[j]$ (すべての $0 \leq i < j \leq N - 1$ について)
  • $C[i] \leq C[j]$ (すべての $0 \leq i < j \leq N - 1$ について)

小課題

  1. (10点) $N \le 1000, \lvert X[i] \rvert \le 10^3$
  2. (23点) $N \le 100\;000$
  3. (17点) $N \le 1\;000\;000$
  4. (31点) $C[i] \le 1$ (すべての $0 \leq i \leq N - 1$ について)
  5. (19点) 追加の制約なし

入出力例

以下の呼び出しを考えます。

car_gathering(3, [-1, 2, 3], [1, 1, 2])

$p = 1$ とします。このとき、割り当て $P = [0,1,2]$ および $Q = [2,1,0]$ が最悪ケースの燃料コストを与えることが証明できます。すなわち、$\text{worst}(p) = \text{cost}(P, Q, p) = (\lvert -1 - 1 \rvert \times 2) + (\lvert 2-1 \rvert \times 1) + (\lvert 3-1 \rvert \times 1) = 7$ です。なお、$P = [2,1,0]$ および $Q = [2,1,0]$ のように、最悪ケースの燃料コストを与える他の割り当てが存在する場合もあります。

また、整数点 $p = 1$ が $\text{worst}(p)$ を最小化する点であることも証明できます。したがって、この呼び出しは 1 を返す必要があります。

サンプルグレーダー

入力形式:

N
X[0] X[1] ... X[N - 1]
C[0] C[1] ... C[N - 1]

出力形式:

car_gathering の戻り値を表す整数。

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.