CF1401B [Ternary Sequence]

Problem

Description

  • 两个序列 \(A, B\)。这两个序列都是由 \(0,1,2\) 这三个数构成。

  • \(x_1,y_1,z_1\)\(x_2,y_2,z_2\) 分别代表 \(A\) 序列和 \(B\) 序列中 \(0,1,2\) 出现的次数。

  • 你可以重新排列两个序列中的元素,然后生成一个新序列 \(C\)\(C\) 的生成规则如下:

\[C_i = \begin{cases}A_iB_i &A_i>B_i \\ 0&A_i = B_i\\ -A_iB_i &A_i<B_i\end{cases}\]

求:所有排列的方案中,\(C\) 序列所有元素之和的最大值。

Solution

本题采用的算法:贪心、构造。

  • 尽量地凑出 \((A_i,B_i)\)\((2,1)\)
  • \(B_i=2\),则和 \(A_i=0\) 的情况配对。
  • 对于剩下的元素,把相同的元素配对。

Code

#include <bits/stdc++.h>

using namespace std;

int t;
int main() {
    scanf("%d", &t);
    int x1, y1, z1, x2, y2, z2;
    while (t--) {
        scanf("%d%d%d%d%d%d", &x1, &y1, &z1, &x2, &y2, &z2);
        x1 -= min(x1, z2), z2 -= min(x1, z2);
        z1 -= min(z1, z2), z2 -= min(z1, z2);
        int ans = (min(y2, z1) - min(y1, z2)) << 1;
        printf("%d\n", ans);
    }
    return 0;
}
posted @   yhx0322  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示