网易 8.20 笔试

题目链接
题目顺序和链接里的图不是一样的, 顺序是链接里的 3 2 1 4

第一题

bfs 但是不知道哪有问题只过了 86.. 有无大佬帮忙找一下 bug

#include <bits/stdc++.h>

using namespace std;

//#define int long long

int a, b;

signed main()
{
    cin >> a >> b;
    queue<pair<int,int>> q;
    set<pair<int,int>> vis;
    int step = 0;
    q.push({a, b});
    vis.insert({a, b});
    for (; ;) {
        if (q.empty()) break;
        step++;
        int size = q.size();
        for (int i = 0; i < size; i++) {
            auto tmp = q.front(); q.pop();
            int ta = tmp.first, tb = tmp.second;
            //cout << ta << " " << tb << endl;
            if (ta == 0 || tb == 0 || ta % tb == 0 || tb % ta == 0) { 
                //cout << "finally: " << ta << " " << tb << endl;
                cout << step - 1 << endl; return 0;
            }
            int t = 10;
            while (ta >= t) {
                int na = ta / t * (t / 10) + ta % (t / 10);
                if (vis.find({na, tb}) == vis.end())
                {q.push({na, tb}); vis.insert({na, tb});}
                t = t * 10;
            }
            int na = ta / t * (t / 10) + ta % (t / 10);
            if (vis.find({na, tb}) == vis.end())
            {q.push({na, tb}); vis.insert({na, tb});}
            t = 10;
            while (tb >= t) {
                int nb = tb / t * (t / 10) + tb % (t / 10);
                if (vis.find({ta, nb}) == vis.end())
                { q.push({ta, nb}); vis.insert({ta, nb}); }
                t = t * 10;
            }
            int nb = (tb / t * (t / 10)) + (tb % (t / 10));
            if (vis.find({ta, nb}) == vis.end())
            { q.push({ta, nb}); vis.insert({ta, nb}); }
        }
        //cout << "----------------" << endl;
    }
    cout << -1 << endl;
    return 0;
}

第二题

扫一遍就行, 保证奇数偶数位都是最大的就行, 特判一下所有数相同的情况 就是那个数据量似乎比题面描述大.. 恶心了好长时间

#include <iostream>

using namespace std;

#define int long long

const int N = 2e5 + 5;

int n, a[N];

signed main()
{
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    int mx1 = 0, mx2 = 0;
    int res = 0;
    for (int i = 1; i <= n; i++) {
        if (i % 2) mx1 = max(mx1, a[i]);
        else mx2 = max(mx2, a[i]);
    }

    for (int i = 1; i <= n; i++) {
        if (i % 2) res += mx1 - a[i];
        else res += mx2 - a[i];
    }
    if (mx1 == mx2) res += n / 2;
    cout << res << endl;
    return 0;
}

第三题

就贪心的把所有能改的都改了, 过了 37 代码忘存了, 反正也不会... 有无大佬来个思路

第四题

DP 过的比暴力少就离谱, 好歹暴力还过了 57 这里就只贴一下 DP 的代码, 希望有大佬帮找一下 bug

#include <bits/stdc++.h>

using namespace std;

#define int long long

const int N = 1e6 + 5;

int n, a[N], f[N];

signed main()
{
    int res = 0;
    map<int,int>mp;
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    if (a[1] == a[3] and a[1] > a[2]) 
        f[3] = 1;
    mp[a[1]] = 1, mp[a[2]] = 2, mp[a[3]] = 3;
    for (int i = 3; i <= n; i++) {
        int last = mp[a[i]];
        f[i] = f[last];
       // if (i == 5) cout << f[i] << " " << f[last] << endl;
        for (int j = last + 1; j < i; j++) 
            if (a[j] < a[last]) f[i]++;
        mp[a[i]] = i;
        res += f[i];
        //if (i == 5) cout << res << endl;
    }
    cout << res << endl;
    return 0;
}
#网易笔试##做完网易2023秋招笔试题,我裂开了#
全部评论
为啥第二题是保证最大值就行呢,比如 4 1 4 2 4 3 8这7个数,让其成为锯齿形不应该是 4 2 4 2 4 2 4操作7次,而最大值8 3 8 3 8 3 8这是操作15次啊。难道是我读错题了吗....
点赞 回复 分享
发布于 2022-08-20 18:29 黑龙江

相关推荐

不愿透露姓名的神秘牛友
07-11 12:31
以前小时候我最痛恨出轨、偷情的人,无论男女,为什么会出轨?现在我成了自己最讨厌的人,没想到分享的东西在牛客会被这么多人看,大家的评价都很中肯,我也认同,想过一一回复,但我还是收声了,我想我应该说说这件事,这件事一直压在我心里,是个很大的心结,上面说了人为什么出轨,我大概能明白了。我们大一下半年开始恋爱,开始恋爱,我给出了我铭记3年的承诺,我对她好一辈子,我永远不会背叛,我责任心太重,我觉得跟了我,我就要照顾她一辈子,我们在一起3年我都没有碰过她,她说往东我就往东,她说什么我做什么,她要我干什么,我就干什么!在学校很美好,中途也出过一些小插曲,比如男闺蜜、男闺蜜2号等等等。但我都强迫她改掉了,我...
牛客刘北:两个缺爱的人是没有办法好好在一起的,但世界上哪有什么是非对错?你后悔你们在一起了,但是刚刚在一起的美好也是真的呀,因为其他人的出现,你开始想要了最开始的自己,你的确对不起自己,21岁的你望高物远,你完全可以不谈恋爱,去过你想要的生活,你向往自由,在一起之后,你要想的不是一个人,而是两个人,你不是变心了,就像你说的,你受够了,你不想包容了,冷静几天是你最优的选择,爱人先爱己。
社会教会你的第一课
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
6
3
分享

创作者周榜

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