#P14718. [RMI 2025] 松鼠 / Squirrel

    ID: 16519 远端评测题 1000ms 2048MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>贪心2025网络流交互题Special JudgeRMI(罗马尼亚)

[RMI 2025] 松鼠 / Squirrel

题目描述

一只松鼠发现了一个存放坚果的储藏室。
储藏室包含 NN 行房间,编号从 00N1N-1
索引为 ii 的一行包含 i+1i+1 个房间,编号从 00ii
位于第 ii 行第 jj 列的房间包含 AijA_{ij} 个坚果。

N×(N+1)2\frac{N \times (N+1)}{2} 个房间中,数 AijA_{ij} 两两不同,且取值在 11N×(N+1)2\frac{N \times (N+1)}{2} 之间。

形式化地说,储藏室的形状是一个三角形半矩阵,即主对角线下方(包含主对角线)的那一部分,其中每个元素表示坚果数量。
这个半矩阵中的数是从 11N×(N+1)2\frac{N \times (N+1)}{2} 的所有整数,每个数恰好出现一次。

例如,当 N=5N = 5 时,储藏室会有 15 个房间,包含从 1 到 15 的数字。
这种储藏室的一个例子可以是下面所示的半矩阵:

::::align{center} ::::

松鼠沿着主对角线行走,并且在位于 (i,i)(i, i) 的每个房间,它会选择一个位于以 (i,i)(i, i) 为右上角、以 (N1,0)(N-1, 0) 为左下角的矩形中的房间,并吃掉该房间里的橡实。
在上面的例子中,当松鼠位于 (1,1)(1, 1) 时,它可以选择吃掉红色标出的 8 个房间中的任意一个房间里的坚果。
当它走过主对角线上的所有房间并且恰好吃了 NN 个不同房间里的坚果后,松鼠心满意足地离开。

要求:给定 NN 以及对任意 0i<N0 \le i < N0ji0 \le j \le iAijA_{ij},求松鼠最多能吃到多少坚果。
同时,对于它访问的 NN 个房间中的每一个,求松鼠所吃的坚果数量。

实现细节

这是一道(函数式)交互题。你不需要,也不应该定义 main 函数。

你需要实现函数

void solve(int N, vector<vector<int>> A, long long& answer, vector<int>& solution)

函数参数:

输入数据:

  • int N:储藏室大小 / 行数
  • vector<vector<int>> A:每个房间中的坚果数量(更准确地说,在 AijA_{ij} 中,0i<N0 \le i < N0ji0 \le j \le i,你会找到第 ii 行第 jj 个位置的房间中的坚果数量)

输出数据:

  • long long &answer:将包含松鼠走过对角线上的全部 NN 个房间后能够吃到的最大坚果数量。
  • vector<int> &solution:一个 vector<int>,包含松鼠在每个房间中吃到的坚果数量。(更准确地说,solutionisolution_i0i<N0 \le i < N 表示松鼠位于房间 (i,i)(i,i) 时吃到的坚果数量)

注意:对于 AAsolutionsolution,下标从 00 开始,并且 solutionsolution 的大小应当恰好为 NN

输入格式

见「实现细节」。

输出格式

见「实现细节」。

5
1
14 6
8 2 15
3 10 4 12
9 5 13 11 7
64
14 10 15 12 13

提示

约束

  • 1N20001 \le N \le 2000
  • 1AijN×(N+1)21 \le A_{ij} \le \frac{N \times (N+1)}{2}
# 分数 约束
11 1111 N5N \le 5
22 1212 N100N \le 100
33 2323 N500N \le 500
44 1515 N1000N \le 1000
55 1313 N1200N \le 1200
66 88 矩阵的内容是随机分配的。
77 1818 无额外约束