字条跳动笔试(60-83.33-100-000)菜鸡做个分享

第一题:闹钟
表示自己真的粗心大意,不等号打错了,没有来得及检查
#include <iostream>
#include <vector>

using namespace std;

int main(){
    // input param
    int N;
    cin >> N;
    vector<vector<int> > array(N, vector<int>(2, 0));
    for (int i = 0; i < N; i++){
        cin >> array[i][0];
        cin >> array[i][1];
    }
    int X;
    cin >> X;
    int A, B;
    cin >> A;
    cin >> B;

    // 考虑失误,应该diff <= 0 而不是diff >= 0
    int minVal = 20*60;
    int outA, outB;
    for (int i = 0; i < N; i++){
        int Hi = array[i][0];
        int Mi = array[i][1];
        int temp = Hi*60 + Mi;
        int late = A*60 + B;
        int diff = (temp + X)%(24*60) - late;
        if (diff <= 0 && diff < minVal){
            minVal = diff;
            outA = Hi;
            outB = Mi;
        }
    }

    cout << outA << " " << outB << endl;
    return 0;
}
第二题:加密,也没有AC,可能还是有些小问题,妄指正
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main(){
    int N, K;
    cin >> N;
    cin >> K;
    string str;
    cin >> str;
    

    vector<int> array;
    for (int i = 0; i < str.size(); i++){
        int temp = str[i] - '0';
        array.push_back(temp);
    }

    vector<int> res;
    res.push_back(array[0]);
    for (int i = 1; i < N; i++){
        int temp = 0;
        if (res.size() < K-1){
            for (int j = 0; j < res.size(); j++)
                temp ^= res[j];
        } else {
            for (int j = 0; j < K-1; j++)
                temp ^= res[res.size()-1-j];
        }
        temp = temp ^ array[i];
        res.push_back(temp);
    }

    for (int i = 0; i < N; i++)
        cout << res[i];
    cout << endl;
    return 0;
}
第三题:奖金 AC
#include <iostream>
#include <vector>

using namespace std;

int main(){
    int N;
    cin >> N;
    vector<int> array(N, 0);
    for (int i = 0; i < N; i++)
        cin >> array[i];

    vector<int> res(N, 100);
    for (int i = 1; i < N; i++){
        if (array[i] > array[i-1])
            res[i] = res[i-1] + 100;
    }
    for (int j = N-2; j >= 0; j--){
        if (array[j] > array[j+1] && res[j] <= res[j+1])
            res[j] = res[j+1] + 100;
    }

    int Sum = 0;
    for (int i = 0; i < N; i++)
        Sum += res[i];
    cout << Sum << endl;
    return 0;
}
第四题:虽然是000,但是我感觉自己的思路应该没问题,再多5分钟调试代码就好了,本地简单测试了一下感觉可以,妄指正。
我的思路是根据给的边更新路径表,应该是最小生成树的问题吧,表示一直没有准备过这方面知识,这次也给提了个醒,看来需要准备下。
#include <iostream>
#include <vector>

using namespace std;

int main(){
    int n;
    cin >> n;
    vector<vector<int> > path;

    for (int i = 0; i < n-1; i++){
        vector<int> temp(2, 0);
        cin >> temp[0];
        cin >> temp[1];
        path.push_back(temp);
    }

    // cout << "output" << endl;
    // for (int i = 0; i < path.size(); i++){
    //     cout << path[i][0] << " " << path[i][1] << endl;
    // }

    vector<vector<int> > table(n, vector<int>(n, 0));
    for (int i = 0; i < path.size(); i++){
        int node1 = path[i][0]-1;
        int node2 = path[i][1]-1;
        table[node1][node2] = 1;
        table[node2][node1] = 1;
    }

    // debug
    cout << "output init table" << endl;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            cout << table[i][j] << " ";
        }
        cout << endl;
    }

    // update table;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            if (i == j)
                continue;
            if (table[i][j]){
                for (int k = j+1; k < n; k++){
                    if (table[i][k]){
                        if (table[j][k] == 0){
                            table[j][k] = table[i][j] + table[i][k];
                            table[k][j] = table[j][k];
                        }
                    }
                }
            }
        }
    }

    // debug
    cout << "update output tabel" << endl;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            cout << table[i][j] << " ";
        }
        cout << endl;
    }


    long long array0 = 0;
    long long array1 = 0;
    long long array2 = 0;
    for (int i = 0; i < n; i++){
        for (int j = i+1; j < n; j++){
            if (table[i][j] % 3 == 0)
                array0 += table[i][j];
            else if (table[i][j] % 3 == 1)
                array1 += table[i][j];
            else
                array2 += table[i][j];
        }
    }
    
    cout << array0 << " " << array1 << " " << array2 << endl;
    
    return 0;
}





#笔试题目##字节跳动#
全部评论
大佬别闹
点赞 回复 分享
发布于 2019-08-11 21:37
膜拜大佬🤔
点赞 回复 分享
发布于 2019-08-11 21:41
第二题优化成O(N)就可以ac了
点赞 回复 分享
发布于 2019-08-11 21:44
大佬,你的奖金的那个题,我改写成了java,但是对于这个样例没法过啊 ```java 3 1 1 1 输出: 200 ``` 大佬你那边是这个结果么
点赞 回复 分享
发布于 2019-08-11 22:07
大家都a出来几道?三道有面试机会吗?
点赞 回复 分享
发布于 2019-08-11 22:35

相关推荐

评论
1
12
分享

创作者周榜

更多
牛客网
牛客企业服务