京东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;
}



#京东笔试#
全部评论
最后一题最后想到了方法,但是没时间写了,无法验证思路正确与否。 对于小于3的情况直接输出0。 推导公式应该是 dp[i] = ((dp[i - 1] * 26 % mod) - (dp[i - 3] % mod) + mod) % mod 输出结果的时候dp[n]*2因为是对称的。 初始化dp直到dp[0] = 0,dp[1] = 0,dp[2] = 1,dp[3] = 1。
1 回复 分享
发布于 2022-09-17 21:14 湖北
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-19 15:22 北京

相关推荐

评论
2
3
分享

创作者周榜

更多
牛客网
牛客企业服务