CF2063D.Game With Triangles

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

即使小 John 也需要钱买房。但他最近失业了,现在该如何赚钱呢?当然是玩能获得金钱奖励的游戏!不过可能不是你想的那种游戏。平面上有 n+mn + m 个互不相同的点 (a1,0),(a2,0),…,(an,0),(b1,2),(b2,2),…,(bm,2)(a_1, 0), (a_2, 0), \ldots, (a_n, 0), (b_1, 2), (b_2, 2), \ldots, (b_m, 2)。初始时你的得分为 00。你可以通过以下操作增加得分:

  • 选择三个不共线的不同点;
  • 将得分增加这三个点形成三角形的面积;
  • 从平面中删除这三个点。

游戏示例,其中执行了两次操作。设 kmax⁡k_{\max} 表示可执行操作的最大次数。例如若无法执行任何操作,则 kmax⁡=0k_{\max} = 0。另外定义 f(k)f(k) 为恰好执行 kk 次操作时可能达到的最大得分。此处 f(k)f(k) 对所有满足 0≤k≤kmax⁡0 \le k \le k_{\max} 的整数 kk 均有定义。

请找出 kmax⁡k_{\max} 的值,并分别计算所有 x=1,2,…,kmax⁡x=1,2,\ldots,k_{\max} 对应的 f(x)f(x) 值。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数量 tt(1≤t≤3⋅1041 \le t \le 3 \cdot 10^4)。接下来描述各个测试用例。

每个测试用例:

  • 第一行包含两个整数 nn 和 mm(1≤n,m≤2⋅1051 \le n,m \le 2 \cdot 10^5)。
  • 第二行包含 nn 个互不相同的整数 a1,a2,…,ana_1, a_2, \ldots, a_n——位于 y=0y=0 直线上的点(−109≤ai≤109-10^9 \le a_i \le 10^9)。
  • 第三行包含 mm 个互不相同的整数 b1,b2,…,bmb_1, b_2, \ldots, b_m——位于 y=2y=2 直线上的点(−109≤bi≤109-10^9 \le b_i \le 10^9)。

保证所有测试用例的 nn 之和与 mm 之和均不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,若最大操作次数为 kmax⁡k_{\max},则最多输出两行:

  • 第一行输出 kmax⁡k_{\max} 的值;
  • 第二行输出 kmax⁡k_{\max} 个整数,表示 f(1),f(2),…,f(kmax⁡)f(1), f(2), \ldots, f(k_{\max})。若 kmax⁡=0k_{\max} = 0 可省略此行。

注意根据题目约束,可以证明所有 f(x)f(x) 的值均为不超过 101610^{16} 的整数。

输入输出样例

  • 输入#1

    5
    1 3
    0
    0 1 -1
    2 4
    0 100
    -100 -50 0 50
    2 4
    0 1000
    -100 -50 0 50
    6 6
    20 1 27 100 43 42
    100 84 1 24 22 77
    8 2
    564040265 -509489796 469913620 198872582 -400714529 553177666 131159391 -20796763
    -1000000000 1000000000

    输出#1

    1
    2
    2
    150 200
    2
    1000 200
    4
    99 198 260 283
    2
    2000000000 2027422256

说明/提示

在第一个测试用例中,共有 1+3=41+3=4 个点:(0,0)(0,0)、(0,2)(0,2)、(1,2)(1,2)、(−1,2)(-1,2)。

可以证明无法执行两次或更多操作。此时 kmax⁡=1k_{\max} = 1,只需输出 f(1)f(1) 的值。选择 (0,0)(0,0)、(−1,2)(-1,2) 和 (1,2)(1,2) 作为三角形的三个顶点。操作后得分增加该三角形的面积 22,随后这三个点被删除。可以证明单次操作后的最大得分为 22,因此 f(1)=2f(1) = 2。

第五个测试用例中共有 8+2=108+2=10 个点。可以证明无法执行三次或更多操作。此时 kmax⁡=2k_{\max} = 2,需要输出 f(1)f(1) 和 f(2)f(2) 的值。

要最大化单次操作的得分,可选择三点 (198 872 582,0)(198\,872\,582,0)、(−1 000 000 000,2)(-1\,000\,000\,000,2) 和 (1 000 000 000,2)(1\,000\,000\,000,2)。操作后这三个点被删除。可以证明此时最大得分为 2 000 000 0002\,000\,000\,000,因此 f(1)=2 000 000 000f(1) = 2\,000\,000\,000。

要最大化两次操作的总得分,可按以下步骤执行:

  1. 选择三点 (−509 489 796,0)(-509\,489\,796,0)、(553 177 666,0)(553\,177\,666,0) 和 (−1 000 000 000,2)(-1\,000\,000\,000,2),删除这三个点;
  2. 选择三点 (−400 714 529,0)(-400\,714\,529,0)、(564 040 265,0)(564\,040\,265,0) 和 (1 000 000 000,2)(1\,000\,000\,000,2),删除这三个点。

两次操作后总得分为 2 027 422 2562\,027\,422\,256。可以证明这是两次操作后的最大得分,因此 f(2)=2 027 422 256f(2) = 2\,027\,422\,256。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页