2022.03.27 网易笔试编程题统计

1、消灭两只怪兽的最少次数。(怪兽生命值a、b,可以进行两种操作,一种是减少一只怪兽生命值x,一种是两种怪兽都减少生命值y,最少操作次数)
2、字符串最大得分。(相邻的两个字符如果相同或在字母表中相邻就得相应的分,求最大得分)。
3、任意父子节点乘积都为偶数的完全二叉树。
4、沼泽地,左上角走到左下角的最少开销。


------------------------------------------------------------------

17:03更新

1、消灭两只怪兽的最少次数。(怪兽生命值a、b,可以进行两种操作,一种是减少一只怪兽生命值x,一种是两种怪兽都减少生命值y,最少操作次数)

一开始想都没想dfs,过了90%几,然后考虑了y>=x的情况,这时肯定是优先两只怪兽都减去y的。

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

int ans = INT_MAX;

void dfs(int a, int b, int x, int y, int step) {
    if(a <= 0 && b <= 0) {
        ans = min(ans, step);
        return;
    }
    if(a > 0) dfs(a - x, b, x, y, step + 1);
    if(b > 0) dfs(a, b - x, x, y, step + 1);
    dfs(a - y, b - y, x, y, step + 1);
    
}

int main() {
    
    int a, b, x, y;
    cin >> a >> b >> x >> y;
    if(y >= x) {
        ans = 0;
        while(a > 0 || b > 0) {
            a -= y;
            b -= y;
            ans++;
        }
    } else {
        dfs(a, b, x, y, 0);
    }
    cout << ans << endl;

    return 0;
}




2、字符串最大得分。(相邻的两个字符如果相同或在字母表中相邻就得相应的分,求最大得分)。

动态规划,只需考虑相邻的就好了
#include <bits/stdc++.h>
using namespace std;

int dp[200005] = {0};

int main() {
    
    string s;
    cin >> s;
    int n = s.size();
    dp[0] = 0;
    dp[1] = 0;
    for(int i = 1; i < n; i++) {
        dp[i + 1] = dp[i];
        if(s[i] == s[i - 1]) {
            dp[i + 1] = max(dp[i + 1], dp[i - 1] + 2 * (s[i] - 'a' + 1));
        }
        if(abs(s[i] - s[i - 1]) == 1) {
            dp[i + 1] = max(dp[i + 1], dp[i - 1] + (s[i] - 'a' + 1) + (s[i - 1] - 'a' + 1));
        }
    }
    cout << dp[n] << endl;

    return 0;
}



3、任意父子节点乘积都为偶数的完全二叉树。

一个一个插入,发现跟父节点乘积为奇数时,就把左边的兄弟节点跟父节点交换

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

int a[100005];

int main() {
    
    int n;
    cin >> n;
    //一个一个插入,发现跟父节点乘积为奇数时,就把左边的兄弟节点跟父节点交换
    a[1] = 1;
    for(int i = 2; i <= n; i++) {
        a[i] = i;
        if((a[i] * a[i / 2]) & 1) swap(a[i - 1], a[i / 2]);
    }
    for(int i = 1; i <= n; i++) printf("%d%c", a[i], i == n ? '\n' : ' ');

    return 0;
}



4、沼泽地,左上角走到左下角的最少开销。

跟昨天的雷火最后一题如出一辙啊,bfs+优先队列

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

int a[501][501];
bool vis[501][501] = {false};
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
struct Node {
    int x, y, step;
    Node(int i, int j, int k): x(i), y(j), step(k) {}
    bool operator<(const Node &p) const {
        return step > p.step;
    }
};

int main() {
    
    int n, m;
    cin >> n >> m;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            cin >> a[i][j];
        }
    }
    priority_queue<Node>q;
    q.emplace(Node(0, 0, 0));
    vis[0][0] = true;
    int ans = INT_MAX;
    while(!q.empty()) {
        auto now = q.top();
        q.pop();
        if(now.x == n - 1 && now.y == m - 1) {
            ans = min(ans, now.step);
        }
        for(int i = 0; i < 4; i++) {
            int next_x = now.x + dir[i][0];
            int next_y = now.y + dir[i][1];
            if(next_x >= 0 && next_x < n && next_y >= 0 && next_y < m && !vis[next_x][next_y]) {
                vis[next_x][next_y] = true;
                int next_step = 1;
                if(a[now.x][now.y] != a[next_x][next_y]) next_step = 2;
                q.emplace(Node(next_x, next_y, now.step + next_step));
            }
        }
    }
    cout << ans << endl;

    return 0;
}


#网易##春招##实习##笔经##网易雷火##网易互娱#
全部评论
这场特别简单,AK的应该不少
7 回复 分享
发布于 2022-03-27 16:18
第一次ak,我还以为自己变强了,原来是题目变简单了
5 回复 分享
发布于 2022-03-27 16:31
第三题只想到了回溯过了50%
4 回复 分享
发布于 2022-03-27 16:56
不ak都不评论,看了大家ak自己没有ak所以自己太菜。
3 回复 分享
发布于 2022-03-27 16:56
2 4 都是简单的动态规划;3可以直接钻篓子,生成一个先偶数后奇数的数组直接返回就是AC; 这么奇怪的题目很少见
2 回复 分享
发布于 2022-03-27 16:56
我还以为自己变强了 原来大家都AK了
2 回复 分享
发布于 2022-03-27 16:40
做了这么多笔试,第一次ak😅
2 回复 分享
发布于 2022-03-27 16:29
第一次AK 还以为自己很强 原来大家都觉得简单啊
1 回复 分享
发布于 2022-03-27 16:58
第一次AK,转码生很欣慰。感谢大厂给予的自信,继续加油。
1 回复 分享
发布于 2022-03-27 16:29
第四题不能直接将第一次遍历到的节点的路径作为作为最短路径吧,如果后面还有节点的最短路径一样,但是它的权重只有2,之前的权重只有1,那么输出的答案就会错误,还是得老老实实用Dijkstra
点赞 回复 分享
发布于 2022-03-28 13:48
第一题y>=x的情况写的不对吧,需要对a,b里最大的进行操作吧,你那样写不对啊,比如5,2,1,2你的答案会返回1,而实际应该是3
点赞 回复 分享
发布于 2022-03-28 12:46
第一题没考虑用dfs暴力😂学到了
点赞 回复 分享
发布于 2022-03-27 17:16
哎哟我傻了,第二题原来第二个字母比第一个字母小也是相邻,纯纯犯蠢了,我说怎么过40%
点赞 回复 分享
发布于 2022-03-27 17:10
有没有和我一样的忘记写简答题了
点赞 回复 分享
发布于 2022-03-27 17:09
太简单这次,一个半小时就a了
点赞 回复 分享
发布于 2022-03-27 17:05
最后一题始终不能ak,原来是我垃圾了😅
点赞 回复 分享
发布于 2022-03-27 16:56
234a了为啥第一题过不去,我吐了
点赞 回复 分享
发布于 2022-03-27 16:38
第二题咋做呀
点赞 回复 分享
发布于 2022-03-27 16:19

相关推荐

在笔试的柠檬精很想去...:兄弟们,你们这个大厂,中厂,小厂怎么定义的 初来驾到,别笑话我,只要能学到本事,不管大厂小厂都可以,但是别进到黑厂就行
找实习记录
点赞 评论 收藏
分享
评论
12
30
分享

创作者周榜

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