去哪儿第三题

#include <iostream>
#include <string>
#include <vector>

using namespace std;

vector<int> minmoney(vector<vector<string> > v, vector<vector<int>> info, string s, string d) {
    int len = v.size() - 1;
    vector<int> min(2);
    min[0] = 10001;
    for (int i = 0; i < v.size(); i++) {
        int len2 = v[i].size();
        int flag = 0;
        for (int j = 0; j < len2 - 1; j++) {
            if (s == v[i][j]) {
                for (int k = j + 1; k < len2; k++) {
                    if (d == v[i][k]) {
                        int tm = info[i][1];
                        if (tm < min[0]) {
                            min[0] = tm;
                            min[1] = info[i][0];
                        }
                        flag = 1;
                        break;
                    }
                }
                if (flag == 1) break;
            }
        }
    }
    return min;
}

int main() {
    int n;
    if (cin >> n); else { cout << "Error" << endl; return 0; }
    vector<vector<string> > v;
    vector<vector<int>> info(n, vector<int>(3));
    for (int i = 0; i < n; i++) {
        if (cin >> info[i][0] >> info[i][1] >> info[i][2]);
        else {
            cout << "Error" << endl;
            return 0;
        }
        vector<string> tmp;
        string ts;
        for (int j = 0; j < info[i][2]; j++) {
            if (cin >> ts);
            else { cout << "Error" << endl; return 0; }
            tmp.push_back(ts);
        }
        v.push_back(tmp);
    }
    int l;
    if (cin >> l); else { cout << "Error" << endl; return 0; }
    vector<string> sd(l);
    for (int i = 0; i < l; i++) {
        if (cin >> sd[i]);
        else { cout << "Error" << endl; return 0; }
    }

    int min = 0;
    vector<int> dd;
    for (int i = 0; i < l - 1; i++) {
        vector<int> tmpmoney = minmoney(v, info, sd[i], sd[i + 1]);
        if (tmpmoney[0] == 10001 || tmpmoney[1] == 0) {
            cout << "Error" << endl;
            return 0;
        }
        if (dd.size() && dd[dd.size() - 1] == tmpmoney[1]) continue;
        min += tmpmoney[0];
        dd.push_back(tmpmoney[1]);
    }
    cout << min << endl;
    int i = 0;
    for (i = 0; i < dd.size() - 1; i++) {
        cout << dd[i] << " ";
    }
    cout << dd[i] << endl;
    return 0;
}
全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务