小美的数组删除
数组a长度为n,数组操作:
- 删除第一个元素,同时数组长度减一,花费为x;
- 删除整个数组,花费为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")