百度暑期笔试编程题 【2023-3-13】

A题

一个字符串能否重新排列成 "Baidu"

#include <bits/stdc++.h>
using i64 = long long;

void solve() {
    std::string s;
    std::cin >> s;
    if (s.size() != 5) {
        std::cout << "No\n";
        return;
    }
    
    std::string t = "Baidu";
    std::set<char> S;
    for (auto ch : s) {
        S.insert(ch);
    }
    for (auto ch : t) {
        if (!S.count(ch)) {
            std::cout << "No\n";
            return;
        }
    }
    std::cout << "Yes\n";
}

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(nullptr);
    
    int T;
    std::cin >> T;
    while (T--) {
        solve();
    }
    
    return 0;
}

B题

r,e,d三个字符,能否构成含有 cnt 个回文串的字符串 s

  • 1cnt1091\le cnt\le 10^9
  • 1len(s)1051\le len(s)\le 10^5

二分找最大就行

#include <bits/stdc++.h>
using i64 = long long;

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(nullptr);
    
    int x;
    std::cin >> x;
    
    int cnt = 0, cur = 0;
    std::string s = "red";
    std::string ans;
    while (cnt < x) {
        int lo = 1, hi = 1e5;
        while (lo < hi) {
            int mid = (lo + hi + 1) / 2;
            if (1ll * mid * (mid + 1) / 2 > x - cnt) {
                hi = mid - 1;
            } else {
                lo = mid;
            }
        }
        cnt += 1ll * hi * (hi + 1) / 2;
        for (int i = 0; i < hi; i++) {
            ans += s[cur];
        }
        cur = (cur + 1) % 3;
    }
    
    std::cout << ans << "\n";
    
    return 0;
}

C题

树形dp

dp[u]dp[u] 是为以 u 为根节点,该树包含同色连通块的数量。

#include <bits/stdc++.h>
using i64 = long long;

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(nullptr);
    
    int n;
    std::string s;
    std::cin >> n >> s;
    std::vector adj(n, std::vector<int>());
    std::vector<int> dp(n, 1);
    for (int i = 0; i < n - 1; i++) {
        int u, v;
        std::cin >> u >> v;
        u--, v--;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    
    i64 ans = 0;
    auto dfs = [&](auto self, int x, int fa) -> void {
        for (auto y : adj[x]) {
            if (y == fa) continue;
            self(self, y, x);
            if (s[x] != s[y]) {
                dp[x] += dp[y];
            } else {
                dp[x] += dp[y] - 1;
            }
        }
    };
    
    auto calc = [&](auto self, int x, int fa) -> void {
        for (auto y : adj[x]) {
            if (y == fa) continue;
            self(self, y, x);
            if (s[x] == s[y]) {
                ans += std::abs(dp[0] - dp[y] + 1 - dp[y]);
            } else {
                ans += std::abs(dp[0] - dp[y] - dp[y]);
            }
        }
    };
    
    dfs(dfs, 0, -1);
    calc(calc, 0, -1);
    std::cout << ans << "\n";
    
    return 0;
}
#笔试##我的实习求职记录##我的求职思考##如何看待2023届秋招##百度#
全部评论
一个B题的思路 B题先填充相同的字符(比如r),然后依次填充e、d、r package main import ( "fmt" "math" "strings" ) func main() { x := 0 fmt.Scan(&x) n := math.Floor(0.5 * (-1 + math.Sqrt(1.0+8.0*float64(x)))) var res strings.Builder res.Grow(100000) for i := 0; i < int(n); i++ { res.WriteByte('r') } x = x - int(n*(n+1)/2.0) for i := 0; i < x; i++ { if i%3 == 0 { res.WriteByte('e') } else if i%3 == 1 { res.WriteByte('d') } else { res.WriteByte('r') } } fmt.Println(res.String()) }
2 回复 分享
发布于 2023-03-13 21:42 江苏
第二题o(1)可以做,放int(n-1)个’r’,然后再放’red’的倍数让串长度等于x,其中n(n+1)/2=x
2 回复 分享
发布于 2023-03-13 21:23 江苏
大佬!我没有议题AC的
2 回复 分享
发布于 2023-03-13 21:16 美国
哇,第二题想复杂了,难受,原来找到最大重复数以后,一直循环填red就行了。难受😣
1 回复 分享
发布于 2023-03-13 21:55 陕西
第二题这么写,rrrrree,rree这种不会算回文子串的个数么,我也是这个思路,只过了40
1 回复 分享
发布于 2023-03-13 21:43 四川
好厉害好厉害,我第三题没看得懂菜狗还没怎么刷题,来试试水
1 回复 分享
发布于 2023-03-13 21:38 上海
有无java版本的
1 回复 分享
发布于 2023-03-13 21:17 美国
第三题写的真牛啊,我什么时候可以这么强
点赞 回复 分享
发布于 2023-03-14 12:02 香港
小菜鸡 T1只过了57.14%,求大佬帮看!我觉得自己的思路是对的Orz ``` #include <bits> #include <cstdio> using namespace std; int main() { int N; cin >> N; string s; string t = "Baidu"; for (int i = 0; i < N; i++) { cin >> s; int n = s.size(), cnt = 0; for (int i = 0; i < n; i++) { if (t.find(s[i]) != string::npos) { cnt++; } } if (cnt == 5 && n == cnt) cout << "Yes" << endl; else cout << "No" << endl; } return 0; } ```</cstdio></bits>
点赞 回复 分享
发布于 2023-03-14 11:08 北京
大佬太强了
点赞 回复 分享
发布于 2023-03-13 22:00 天津
你这第三题递归好牛。我思路和你一样,只是构造了一棵树去递归遍历,内存超了。如果我会你这么遍历,估计也AC了
点赞 回复 分享
发布于 2023-03-13 21:48 天津
tql 我第三题没时间了
点赞 回复 分享
发布于 2023-03-13 21:34 广东
B题这个 1ll * mid * (mid + 1) / 2 > x - cnt 是什么意思
点赞 回复 分享
发布于 2023-03-13 21:29 湖北
大佬,第三题的同色连通块数怎么理解?看半天看不懂
点赞 回复 分享
发布于 2023-03-13 21:23 广东
问问楼主,这个lambda中的self为什么查不到有关的资料呢?我看网上用lambda递归都是用的function
点赞 回复 分享
发布于 2023-03-13 21:17 广东

相关推荐

04-12 21:52
南开大学 Java
鼠鼠有点摆,去年边学着没敢投简历,没实习。从1月到现在总共面了五次,四次字节的日常(HR打电话约面试才敢去的),然后一次腾讯的暑期,都是一面挂,其他则是没给面。暑期的岗,4.2才开始海投,前面想着等字节第四次一面后再投,结果挂,而且感觉投晚了。字节投了11个,9个简历挂,剩下2个没动静。阿里全都简历挂,剩下的在&quot;投递简历&quot;。腾讯给了一次面。然后其他大中厂、手机厂什么的都是做完测评or笔试就没下文,打开几个看也是终止流程,感觉剩下的也应该是简历挂了。感觉是简历的原因?项目部分,几次面试,感觉面试官主要就拷问过秒杀这一个点。自己说的时候会尝试把sse那条说成亮点,但除了腾讯面试官问过一下这整个点在业务方面对用户有什么用之类的问题外,其他最多只是问一下sse八股...感觉也许不是很让面试官感兴趣。这个短链接也是无人问津,就被问过一回雪花算法的设计。也许我该拿点评改改,然后再在网上找一个什么项目,凑两个,而不是用自己现在这两个项目?或者是点评改改放前面,然后原本第一个项目,把秒杀抽掉,剩下的想办法从网上火的RAG项目里移植点亮点,或者直接就用网上的RAG项目?感觉我主要还是偏向后端开发,但是感觉如果除开点评,再拿一个项目,想不到有什么自己能掌控且跟点评不重的。然后鼠鼠之前主要的问题是担心面试让打开项目演示,然后就一直花时间在用AI整第一个项目,第二个项目都没时间整,第四次面试之前还因为太害怕被认为不熟悉项目,跟AI一起把简历的说辞做了大幅度弱化,然后暑期都是拿弱化后的简历投的,感觉是不是看上去太没有吸引力就直接给简历挂了。(图1是弱化后的,图2是弱化前的,但之前3月初投了几家好像也是简历挂。)而且因为3月花了很多时间整在跟AI整代码,导致八股和算法都没怎么看,算法之前有跟灵神题单刷一些,还算入门,但是八股只看了一些基本的,可能面试的时候只答得上来60-70%,而且表述有些混乱,都是想到哪说到哪;前面几回面试基本上都有大板块的基础八股没答出来,比如RedisZ&nbsp;Set数据结构,MQ延时消息、可靠性保证,JVM内存分配的过程、GC&nbsp;roots,JUC锁,设计模式。现在有点不知道该怎么办。求大佬们给点简历修改建议或者面试准备建议,不胜感激!
何时能不做牛马:简历每个点之间的间距可以缩一下。几乎没遇到过要演示项目的情况,即使万一遇上了你也可以说部署在其他电脑上本地没代码。nku不应该简历挂吧?抓紧背背八股练练表达,不要放弃,五六月份找到也不晚(不然还得提前入职
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
17
61
分享

创作者周榜

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