CF2158B.Split

普及-

通过率:0%

AC君温馨提醒

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

题目描述

给定一个包含 2n2n 个整数的序列 aa。定义 f(b)f(b) 表示序列 bb 中出现次数为奇数的不同元素个数。你需要将所给数组划分为两个互不相交的子序列 pp 和 qq,每个子序列的大小均为 nn,使得 f(p)+f(q)f(p) + f(q) 的值最大。请输出最大值。

一个序列 aa 是序列 bb 的子序列,如果 aa 可以通过从 bb 中删除若干(可能为零或全部)位置的元素得到。

输入格式

每个测试点包含多组测试数据。第一行包含测试数据组数 tt(1≤t≤1041 \le t \le 10^4)。
接下来每组测试数据包含两行:
第一行包含一个整数 nn(1≤n≤2⋅1051 \le n \le 2 \cdot 10^5)。
第二行包含 2n2n 个整数 a1,a2,…,a2na_1,a_2,\ldots,a_{2n}(1≤ai≤2n1 \le a_i \le 2n),即序列 aa 的元素。

保证所有测试点中 nn 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

每组测试数据输出一行。
每行输出一个整数,表示能取得的 f(p)+f(q)f(p) + f(q) 的最大值。

输入输出样例

  • 输入#1

    7
    2
    1 2 3 4
    3
    5 5 5 5 5 5
    4
    3 3 7 6 3 7 8 7
    2
    2 2 2 2
    6
    1 2 3 4 5 4 1 4 1 5 4 6
    4
    1 2 1 2 1 2 1 2
    5
    9 9 9 7 7 7 9 7 7 7

    输出#1

    4
    2
    4
    0
    8
    4
    2

说明/提示

对于第一个测试用例:

  • 可以将数组划分为 p=[1,3]p = [1, 3] 和 q=[2,4]q = [2, 4]。
  • 这样 f(p)=2f(p) = 2,f(q)=2f(q) = 2,因为每个都有两个出现次数为奇数的不同元素。

对于第二个测试用例:

  • 可以将数组划分为 p=[5,5,5]p = [5, 5, 5] 和 q=[5,5,5]q = [5, 5, 5]。
  • 这样 f(p)=1f(p) = 1,f(q)=1f(q) = 1。

对于第五个测试用例:

  • 可以将数组划分为 p=[1,2,3,4,5,6]p = [1, 2, 3, 4, 5, 6] 和 q=[4,1,4,1,5,4]q = [4, 1, 4, 1, 5, 4]。
  • 这样 f(p)=6f(p) = 6,f(q)=2f(q) = 2。

由 ChatGPT 5 翻译

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

首页