20220904 字节开发笔试

0.四道都A了,可以先看看代码,哪里不明白可以在评论里问一下
1.第一题用逗号分隔,用python写的,代码没保存;(大家应该都过了吧)
2. 第二题弹弹球,就是简单动态规划的变形
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int a[1005][1005];
int b[1005][1005];
bool flag[1005][1005];
int N,M;
int main(){
    cin >> N >> M;
    for(int i = 1;i<=N;i++){
        for(int j = 1;j<=M;j++){
            cin >> a[i][j];
        }
    }
    for(int i = 1;i<=N;i++)
    {
        for(int j = 1; j<=M;j++)
        {
            if(i == 1){
                flag[i][j] = true;
            }
            if(flag[i][j])
            {
                if(a[i][j] == -1)
                {
                    flag[i+1][j+1] = true;
                    flag[i+1][j-1] = true;
                }
                else flag[i+1][j] = true;
            }
        }
    }
    
    int ans = 0;
    for(int i = 1;i<=N;i++){
        for(int j = 1; j<=M;j++){
            if(!flag[i][j]) continue;
            if(i == 1){
                b[i][j] = max(a[i][j], 0);
                continue;
            }
            if(flag[i-1][j-1] && a[i-1][j-1] == -1){
                b[i][j] = max(b[i][j], b[i-1][j-1]);
            }
            if(flag[i-1][j+1] && a[i-1][j+1] == -1){
                b[i][j] = max(b[i][j], b[i-1][j+1]);
            }
            if(flag[i-1][j] && a[i-1][j] != -1){
                b[i][j] = max(b[i][j], b[i-1][j]);
            }
            b[i][j] += max(0,a[i][j]);
            ans = max(ans,b[i][j]);
        }
    }
    cout << ans;
}
3. 判断什么赛高数
#include <iostream>
#include <algorithm>
#include <cmath>
#include <unordered_set>
using namespace std;
int a[200005];
int main(){
    int N,n;
    cin >> N;
    while(N--){
        cin >> n;
        for(int i = 1;i<=n;i++){
            cin >> a[i];
        }
        sort(a+1,a+n+1);
        if(a[1]<0 && a[2]<0 && a[3] < 0){
            cout << "NO"<<endl;
            continue;
        }
        else if(a[n-1]>0 && a[n-2]>0 && a[n-3] > 0){
            cout << "NO" <<endl;
            continue;
        }
        else {
            unordered_set<int> S;
            for(int i = 1;i<=n;i++){
                S.insert(a[i]);
            }
            bool flag = true;
            for(int i = 1;flag && i<=n;i++){
                for(int j = i+1; flag && j<=n;j++){
                    for(int k = j+1;flag && k<=n;k++){
                        if(S.count(a[i]+a[j]+a[k]) == 0){
                            flag = false;
                            break;
                        }
                    }
                }
            }
            if(flag) {
                cout << "YES"<<endl;
            }
            else {
                cout << "NO"<<endl;
            }
        }
    }
}
4.子字符串,暴力即可
#include <iostream>
#include <algorithm>
#include <cmath>
#include <unordered_set>
#include <string>
using namespace std;

int main(){
    int t;
    cin >> t;
    while(t--)
    {
        int n,m;
        string s, ch;
        cin >> n >> m;
        cin >> s >> ch;
        int ans = 0;
        for(int i = 0;i<n;i++)
        {
            int p = i-1, q = i+1;
            int w = 0;
            int res = 1;
            while(p >= 0)
            {
                if(s[p] == s[i]){
                    p--;
                    res+=1;
                }
                else if(ch[p] == '1'){
                    p--;
                    res+=1;
                    w+=1;
                }
                else{
                    break;
                }
                if(w > m) {
                    res --;
                    break;
                }
            }

            while(q < n)
            {
                if(s[i] == s[q])
                {
                    q++;
                    res+=1;
                }
                else if(ch[q] == '1'){
                    q++;
                    res+=1;
                    w+=1;
                }
                else{
                    break;
                }
                if(w > m) {
                    res --;
                    break;
                }
            }
            ans = max(ans,res);
        }
        cout << ans << endl;
    }
}



#字节笔试##字节##字节招聘##字节面试#
全部评论
为什么第一道用Python,后面用c++可以换吗?
1 回复
分享
发布于 2022-09-04 22:26 陕西
好强呀。
点赞 回复
分享
发布于 2022-09-04 22:24 上海
联易融
校招火热招聘中
官网直投
大佬你好,想请教一下最后一个题。我看你的代码是先考虑位置i的左边,直到左边无法向左然后再考虑右边,那么如果左边就把m用完了,然后右边无法向右了怎么办?
点赞 回复
分享
发布于 2022-09-04 22:38 黑龙江
弹珠游戏有java版的吗?今天被虐到了
点赞 回复
分享
发布于 2022-09-05 00:21 陕西
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复
分享
发布于 2022-09-05 14:50 北京
想问一下关于三数和那道题,我的思路是 1.数组里面没有0,如果存在3个或3个以上同正负的数输出NO 2.数组里面有0,如果存在2个或2个以上同正负的数输出NO 3.如果全是0,输出YES 4.数组里面有0,且除0以外,只剩下一个数或者一组互为相反数的两个数,则输出YES,否则输出NO 5.数组里面没有0,且剩下的3个或者4个数满足条件,则输出YES,否则输出NO 不知道为啥过不了,是我哪种情况没有考虑到吗
点赞 回复
分享
发布于 2022-09-05 15:50 天津
约面试了吗?听说字节笔试是简历挂,要笔试ak才行
点赞 回复
分享
发布于 2022-09-08 12:37 上海

相关推荐

7 18 评论
分享
牛客网
牛客企业服务