首页 > 拼多多笔试 小菜鸟一枚 求大佬解答
头像
斯锅二
编辑于 2020-08-02 21:06
+ 关注

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

第一题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;
}


全部评论

(6) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐