codeforces 1810C
link
删除所有的数然后加上一个1是一种方案
对每个位置贪心的求最优,即填满前面的位置,删除后面的位置
#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using i64 = long long;
void solve() {
i64 n, c, d;
std::cin >> n >> c >> d;
std::vector<i64> a(n);
for (int i = 0; i < n; i ++) {
std::cin >> a[i];
}
sort(a.begin(), a.end());
a.erase(std::unique(a.begin(), a.end()), a.end());
i64 sum = 0;
sum += c * (n - a.size());
i64 ans = 1e18;
for (int i = 0; i < a.size(); i ++) {
ans = std::min(ans, sum + (a[i] - i - 1) * d + c * ((i64)a.size() - i - 1));
}
ans = std::min(ans, n * c + d);
std::cout << ans << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t = 1;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}