B. All Distinct

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Sho has an array aa consisting of nn integers. An operation consists of choosing two distinct indices ii and jj and removing aiai and ajaj from the array.

For example, for the array [2,3,4,2,5], Sho can choose to remove indices 1 and 3. After this operation, the array becomes [3,2,5]. Note that after any operation, the length of the array is reduced by two.

After he made some operations, Sho has an array that has only distinct elements. In addition, he made operations such that the resulting array is the longest possible.

More formally, the array after Sho has made his operations respects these criteria:

  • No pairs such that (i<j) and ai=aj exist.
  • The length of a is maximized.

Output the length of the final array.

Input

The first line contains a single integer tt (1≤t≤103) — the number of test cases.

The first line of each test case contains a single integer nn (1≤n≤50) — the length of the array.

The second line of each test case contains nn integers aiai (1≤ai≤104) — the elements of the array.

Output

For each test case, output a single integer — the length of the final array. Remember that in the final array, all elements are different, and its length is maximum.

Example

input

4
6
2 2 2 3 3 3
5
9 1 9 9 1
4
15 16 16 15
4
10 100 1000 10000

output

2
1
2
4

Note

For the first test case Sho can perform operations as follows:

  1. Choose indices 11 and 55 to remove. The array becomes [2,2,2,3,3,3]→[2,2,3,3].
  2. Choose indices 11 and 44 to remove. The array becomes [2,2,3,3]→[2,3]

The final array has a length of 2, so the answer is 2. It can be proven that Sho cannot obtain an array with a longer length.

For the second test case Sho can perform operations as follows:

  1. Choose indices 33 and 44 to remove. The array becomes [9,1,9,9,1]→[9,1,1].
  2. Choose indices 11 and 33 to remove. The array becomes [9,1,1]→[1].

The final array has a length of 1, so the answer is 1. It can be proven that Sho cannot obtain an array with a longer length.

code

#include <iostream>
using namespace std;
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int n, a[55] = { 0 }, b[10005] = { 0 }, ans = 0;
        cin >> n;
        for(int i = 0; i < n; i++)
        {
            cin >> a[i];
            b[a[i]]++;
            if(b[a[i]] == 1)//找到有几种数,->n - ans 即为重复的不要的数
                ans++;
        }
        if((n - ans) % 2)
            cout << ans - 1 << endl;
        else
            cout << ans << endl;
    }
    return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
distinct的作用是去除查询结果中的重复记录,而union all则是将多个查询结果合并在一起,不去除重复记录。在使用union all后再使用distinct,相当于先将多个查询结果合并,然后再去除其中的重复记录。这样做的效率相对较低,因为需要对合并后的结果进行排序。而使用exists代替distinct可以避免排序,提高查询效率。所以在多表查询时,建议使用union all代替union,并使用exists代替distinct。[1][2] 举个例子来说明,假设有两个表TABLE_R和TABLE_BAL,它们的结构相同,都包含ACNO、DAT、LOGACNO、SENO和PROVICEID这几个字段。如果我们想要查询这两个表中的所有记录,并去除重复记录,可以使用以下语句: SELECT DISTINCT * FROM ( SELECT trim(ACNO) as ACNO, DAT, LOGACNO, SENO, PROVICEID FROM TABLE_R UNION ALL SELECT trim(ACNO) as ACNO, DAT, LOGACNO, SENO, PROVICEID FROM TABLE_BAL ) 这样的查询会先将两个表的记录合并,然后再去除重复记录。但是这个查询的效率相对较低,因为需要对合并后的结果进行排序。而如果我们使用exists代替distinct,可以提高查询效率: SELECT * FROM TABLE_R R WHERE EXISTS ( SELECT 1 FROM TABLE_BAL B WHERE trim(B.ACNO) = trim(R.ACNO) AND B.DAT = R.DAT AND B.LOGACNO = R.LOGACNO AND B.SENO = R.SENO AND B.PROVICEID = R.PROVICEID ) 这样的查询不需要进行排序,效率较高。所以在多表查询时,使用exists代替distinct可以提高查询效率。[3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值