拼多多笔试 小菜鸟一枚 求大佬解答

第一题ac
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int target, n; //当前距离,投掷次数
    cin >> target >> n;
    if(target==0){
        cout << "paradox" << endl;
        return 0;
    }
    
    vector<int> vec;
    int dist = target; //距离终点的距离
    int d;//投出点数为d的骰子
    int backcount = 0; //回退次数
    for(int i=0; i<n; i++){
        cin >> d;
        if( d == dist && i<n-1){
            cout << "paradox" << endl; //如果成功到达终点
            return 0;
        }else if( d > dist ){ //超出了就要回退
            dist = d - dist;
            backcount++;
        }else{
            dist = dist - d;
        }
    }
    //如果没有成功到达,要输出最终距离,以及回退次数
    cout << dist << " " << backcount << endl;
    return 0;
}

第二题不会。判断等价骰子的情况

第三题暴力解只通过50%,超时
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int minenergy = 100001;
    bool flag = false;
    int n, m, tasteTarget; //中餐数量,晚餐数量,最低美味要求
    cin >> n >> m >> tasteTarget;
    //最低美味值为0,那就一顿都不吃
    if( tasteTarget==0 ){
        cout << 0 << endl;
        return 0;
    }
    //中餐的热量和美味
    vector<int> energyA;
    vector<int> tasteA;
    int energy, taste;
    for(int i=0; i<n; i++){
        cin >> energy >> taste;
        //单吃午餐就达到美味要求了
        if( taste >= tasteTarget ){
            flag = true;
            //更新最低热量
            if(energy<minenergy)
                minenergy = energy;
        }else if( taste>0){//否则就记录,用作后续跟晚饭一起(注意美味值为0就不记录了)
            energyA.push_back(energy);
            tasteA.push_back(taste);
        }
    }
    //晚餐的热量和美味
    vector<int> energyB;
    vector<int> tasteB;
    for(int i=0; i<m; i++){
        cin >> energy >> taste;
        //单吃wan餐就达到美味要求了
        if( taste >= tasteTarget ){
            flag = true;
            //更新最低热量
            if(energy<minenergy)
                minenergy = energy;
        }else if( taste>0 ){//否则就记录,用作后续跟中餐一起(注意美味值为0就不记录了)
            energyB.push_back(energy);
            tasteB.push_back(taste);
        }
    }
    //每餐可吃可不吃,但最多吃一种套餐。在最低美味要求tasteTarget之下,最少的热量值(输出结果)
    //两餐都吃
    int sizea = energyA.size();
    int sizeb = energyB.size();
    for(int i=0; i<sizea; i++){
        for(int j=0; j<sizeb; j++){
            energy = energyA[i] + energyB[j];
            taste = tasteA[i] + tasteB[j];
            if( taste >= tasteTarget ){
                flag = true;
                //更新最低热量
                if(energy<minenergy)
                    minenergy = energy;
            }
        }
    }
    
    if(flag){
        cout << minenergy<< endl;
    }else{
        cout << -1 << endl;
    }
    
    return 0;
}


#笔试题目##拼多多#
全部评论
我和你一模一样😂
点赞 回复
分享
发布于 2020-08-02 21:04
老哥,第三题排个序再搜啊
点赞 回复
分享
发布于 2020-08-02 21:05
联易融
校招火热招聘中
官网直投
第二个让1始终在上面,周围四个中最大的始终在正前面,就唯一确定筛子情况了,map计数就a了,就是旋转换值时候有点恶心
点赞 回复
分享
发布于 2020-08-02 21:13
第二题暴力求解呗,给你一个筛子,它的组合数就是24种情况,把这24种情况列出来整道题就没难点了。当然这24种情况你可以暴力列出来,也可以写个函数分组生成。
点赞 回复
分享
发布于 2020-08-02 23:29
第一题原来最后一步到了不算到达终点呀,一直没找到哪里出错了。 if( d == dist && i<n-1)
点赞 回复
分享
发布于 2020-08-03 10:31
想知道这句话if( d == dist && i<n-1)的i<n-1是为什么呢,我昨天交这道题一直是通过96%用例,不知道哪里错了
点赞 回复
分享
发布于 2020-08-03 11:05

相关推荐

1 3 评论
分享
牛客网
牛客企业服务