小美的数组删除

数组a长度为n,数组操作:

  1. 删除第一个元素,同时数组长度减一,花费为x;
  2. 删除整个数组,花费为k*MEX(a)(其中MEX(a)表示a中未出现过的最小非负整数,例如[0,1,2,4]的MEX为3

求最小代价。

#include <climits>
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

#define int long long


signed main() 
{
    int T;
    cin >> T;
    while(T--)
    {
        int n, k, x;
        cin >> n >> k >> x;
        vector<int> a(n + 1, 0);
        vector<int> elemNums(n + 1, 0);
        for(int i = 1; i <= n; ++i)
        {
            cin >> a[i];
            elemNums[a[i]]++;
        }
        int cost = LLONG_MAX;
        for(int i = 0; i <= n; ++i)
        {
            int curCost = LLONG_MAX;
            if(i > 0)
            {
                elemNums[a[i]]--;
            }
            auto idx = find(elemNums.begin(), elemNums.end(), 0);
            int MEX = idx - elemNums.begin();
            curCost = i * x + k * MEX;
            cost = min(curCost, cost);
        }
        cout << cost << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务