1 条题解

  • 0
    @ 2022-10-14 10:27:19

    这题数据量比较小,多组数据的清空数组可以直接全部清空也没关系。

    数据量比较多的时候可以按照我的代码写的方式,只修改被改变的部分来避免时间超限。

    #include <bits/stdc++.h>
    using namespace std;
    int t, n;
    int a[55];
    int cnt[10005]; //统计每个数的出现次数
    int main()
    {
        cin >> t;
        while (t--)
        {
            //输入
            cin >> n;
            a[0] = 0; //用来保证a[0]与a[1]不同
            for (int i = 1; i <= n; i++)
                cin >> a[i];
            sort(a + 1, a + n + 1); //让相同的数放在一起
            //计数
            for (int i = 1; i <= n; i++)
                cnt[a[i]]++;
            //统计出现奇数次与偶数次的数的个数
            int odd = 0;  //多少个数出现次数为奇数次
            int even = 0; //多少个数出现次数为偶数次
            for (int i = 1; i <= n; i++)
            {
                if (a[i] != a[i - 1]) //避免重复计算
                {
                    if (cnt[a[i]] % 2 == 0)
                        even++;
                    else
                        odd++;
                }
            }
            //得到答案:每两个出现次数偶数次的数可以各去掉一个来实现都保留
            cout << odd + (even / 2 * 2) << "\n";
            //清空cnt数组
            for (int i = 1; i <= n; i++)
                cnt[a[i]]--;
        }
    
        return 0;
    }
    
    • 1

    信息

    ID
    1102
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    27
    已通过
    10
    上传者