京东9.17笔试 C/C++岗
20道选择,三道编程。编程题第一题忘记了,第二题求最少移动次数,第三题求优美串(有red没der)
前两题AC,最后一题0%,求一个大佬讲解一下第三题
贴一下我自己前两题的AC代码
第一题
#include <iostream> #include <vector> using namespace std; int main() { int a = 0, b = 0; cin >> a >> b; if (a > b + 1) { cout << -1 << endl; return 0; } vector<int> nums(a + b, 2); for (int i = 0; i < a; ++i) { nums[2 * i] = 1; } for (int i = 0; i < a + b; ++i) cout << nums[i] << " "; cout << endl; return 0; }第二题
#include <iostream> #include <vector> #include <unordered_set> using namespace std; int main() { int n = 0; int k = 0; cin >> n >> k; vector<int> iv(n, 0); int a = 0; for (int i = 0; i < n; ++i) { cin >> a; iv[i] = a; } vector<int> visited(k + 1, 0); long long needRemovedIdxSum = 0; for (int i = 0; i < k; ++i) { if (iv[i] <= k && visited[iv[i]] == 0) visited[iv[i]] = 1; else { needRemovedIdxSum += i; } } long long needInsertIdxSum = 0; for (int e = 1; e <= k; ++e) { if (visited[e] == 0) { for (int subi = k; subi < iv.size(); ++subi) { if (iv[subi] == e) { needInsertIdxSum += subi; break; } } } } cout << needInsertIdxSum - needRemovedIdxSum << endl; return 0; }