8.15 携程笔试

1.输出有毒...
#include <iostream>
#include <vector>
#include <numeric>
#include <limits>
#include <bits/stdc++.h>

using namespace std;


/*请完成下面这个函数,实现题目要求的功能
当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
******************************开始写代码******************************/
vector<int> divingBoard(int a, int b, int k) {
    int p = a;
    int q = b;
    a = min(p, q);
    b = max(p, q);
    if(k == 0)
        return {};
    if(a == b)  return {a*k};
    vector<int> ans(k+1, 0);
    int t = a * k;
    ans[0] = t;
    for(int i = 1 ; i <= k ; i++){
        t -= a;
        t += b;
        ans[i] = t;
    }
    //ans.erase(unique(ans.begin(), ans.end()), ans.end());
    return ans;
}
/******************************结束写代码******************************/

int main() {
    vector < int > res;
    int a,b,k;
    cin >> a >> b >> k;
    res = divingBoard(a, b, k);
    if(res.size() == 0){
        cout << "[]" << endl;
        return 0;
    }
    cout << '[';
    for(int res_i=0; res_i < res.size() - 1; res_i++) {  cout << res[res_i] << ',';
    }
    cout << res[res.size()-1] << ']' << endl;
    return 0;

}

2.处理输入建树,还要判断不合法
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
    int val;
    vector<TreeNode *> child;
    TreeNode(int x) : val(x){}
};
map<string, TreeNode*> mp;
bool flag;

int f(TreeNode* root){
    if(root == NULL)
        return 0;
    int sum = 0;
    for(int i = 0 ; i < root->child.size() ; i++){
        sum = max(sum, f(root->child[i]));
    }
    sum += root->val;
    if(root->val == -1){
        flag = false;
    }
    return sum;
}

int main()
{
    string s;
    cin >> s;
    s += '|';
    flag = true;
    for(int i = 0 ; i < s.length() ; i++){
        int k = 0;
        while(s[i + k] != '`'){
            k++;
        }
        string name = s.substr(i, k);
        i += k+1; k = 0;
        int sum = 0;
        while(s[i+k] != '`'){
            sum = sum * 10 + s[i+k] - '0';
            k++;
        }
        i += k;
        TreeNode* t;
        if(mp.find(name) == mp.end()){
            t = new TreeNode(sum);
            mp[name] = t;
        }
        else{
            t = mp[name];
        }
        t->val = sum;
        //cout << name << " " << sum << endl;
        while(s[i] != '|'){
            i++;
            k = 0;
            while(s[i+k] != ',' && s[i+k] != '|'){
                k++;
            }
            string name = s.substr(i, k);
            if(name == "END"){
                i += k;
                if(t->child.size() != 0){
                    cout << -1 <<endl;
                    return 0;
                }
                break;
            }
            TreeNode* p;
            if(mp.find(name) == mp.end()){
                p = new TreeNode(-1);
                mp[name] = p;
            }
            else
                p = mp[name];
            t->child.push_back(p);
            i += k;
        }
        //cout << t->val << " " << t->child.size() <<endl;
    }
    int ans = f(mp["HEAD"]);
    if(flag == false)
        ans = -1;
    cout <<  ans << endl;
    return 0;
}
/*

HEAD`0`A,B,C|A`20`END|B`100`END|C`50`D,E|D`80`F|E`150`END|F`30`END

*/
	


#笔试题目##携程#
全部评论
这是我见过最Sha Bi 的笔试题了
3 回复 分享
发布于 2020-08-15 20:09
输入输出真的醉了
2 回复 分享
发布于 2020-08-15 20:03
我10分钟第一题,40分钟调试才知道要自己输入"[]"加逗号,你发现的太快了,我都想骂人了
2 回复 分享
发布于 2020-08-15 20:08
输出好毒,我一个小时就在那里WA和莫名其妙的TLE;
1 回复 分享
发布于 2020-08-15 20:06
C++用它给的模板写的一直超时
1 回复 分享
发布于 2020-08-15 20:19
没看明白第二题…qiu解释🤣
点赞 回复 分享
发布于 2020-08-15 20:04
第二题不是人家给了输入了吗?
点赞 回复 分享
发布于 2020-08-15 20:06
什么叫处理不合法啊 第二题 你是怎么处理的
点赞 回复 分享
发布于 2020-08-15 20:09
楼主问一下输入排查你考虑了哪些情况?我一直卡88%
点赞 回复 分享
发布于 2020-08-15 20:09
第二题的输入不合法要考虑哪些情况啊,感觉正则匹配太复杂了
点赞 回复 分享
发布于 2020-08-15 20:10
啊啊,第二题一直卡在44%。。不知道咋校验输入。擦了
点赞 回复 分享
发布于 2020-08-15 20:10
第二题全a了吗?
点赞 回复 分享
发布于 2020-08-15 20:22
请问第一题为什么要写这2句:a = min(p, q);     b = max(p, q);
点赞 回复 分享
发布于 2020-08-15 21:22

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
2 4 评论
分享
牛客网
牛客企业服务