CF2063D.Game With Triangles
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
即使小 John 也需要钱买房。但他最近失业了,现在该如何赚钱呢?当然是玩能获得金钱奖励的游戏!不过可能不是你想的那种游戏。平面上有 n+m 个互不相同的点 (a1,0),(a2,0),…,(an,0),(b1,2),(b2,2),…,(bm,2)。初始时你的得分为 0。你可以通过以下操作增加得分:
- 选择三个不共线的不同点;
- 将得分增加这三个点形成三角形的面积;
- 从平面中删除这三个点。
游戏示例,其中执行了两次操作。设 kmax 表示可执行操作的最大次数。例如若无法执行任何操作,则 kmax=0。另外定义 f(k) 为恰好执行 k 次操作时可能达到的最大得分。此处 f(k) 对所有满足 0≤k≤kmax 的整数 k 均有定义。
请找出 kmax 的值,并分别计算所有 x=1,2,…,kmax 对应的 f(x) 值。
输入格式
每个测试包含多个测试用例。第一行包含测试用例数量 t(1≤t≤3⋅104)。接下来描述各个测试用例。
每个测试用例:
- 第一行包含两个整数 n 和 m(1≤n,m≤2⋅105)。
- 第二行包含 n 个互不相同的整数 a1,a2,…,an——位于 y=0 直线上的点(−109≤ai≤109)。
- 第三行包含 m 个互不相同的整数 b1,b2,…,bm——位于 y=2 直线上的点(−109≤bi≤109)。
保证所有测试用例的 n 之和与 m 之和均不超过 2⋅105。
输出格式
对于每个测试用例,若最大操作次数为 kmax,则最多输出两行:
- 第一行输出 kmax 的值;
- 第二行输出 kmax 个整数,表示 f(1),f(2),…,f(kmax)。若 kmax=0 可省略此行。
注意根据题目约束,可以证明所有 f(x) 的值均为不超过 1016 的整数。
输入输出样例
输入#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=4 个点:(0,0)、(0,2)、(1,2)、(−1,2)。
可以证明无法执行两次或更多操作。此时 kmax=1,只需输出 f(1) 的值。选择 (0,0)、(−1,2) 和 (1,2) 作为三角形的三个顶点。操作后得分增加该三角形的面积 2,随后这三个点被删除。可以证明单次操作后的最大得分为 2,因此 f(1)=2。
第五个测试用例中共有 8+2=10 个点。可以证明无法执行三次或更多操作。此时 kmax=2,需要输出 f(1) 和 f(2) 的值。
要最大化单次操作的得分,可选择三点 (198872582,0)、(−1000000000,2) 和 (1000000000,2)。操作后这三个点被删除。可以证明此时最大得分为 2000000000,因此 f(1)=2000000000。
要最大化两次操作的总得分,可按以下步骤执行:
- 选择三点 (−509489796,0)、(553177666,0) 和 (−1000000000,2),删除这三个点;
- 选择三点 (−400714529,0)、(564040265,0) 和 (1000000000,2),删除这三个点。
两次操作后总得分为 2027422256。可以证明这是两次操作后的最大得分,因此 f(2)=2027422256。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?