4399 8.14笔试三道题思路

用例都过了 不一定ac 但思路应该没问题

#include <iostream>
#include <vector>
#include <algorithm>


using namespace std;


struct Entry {
    char type;
    int size = 0;
    vector<Entry> children;
};


Entry parseInput(istream& in) {
    Entry currentEntry;
    in >> currentEntry.type;

    if (currentEntry.type == 'f') {
        in >> currentEntry.size;
    } else if (currentEntry.type == 'd') {
        while (true) {
            char nextType;
            in >> nextType;
            if (nextType == 'e') break;
            in.putback(nextType);
            currentEntry.children.push_back(parseInput(in));
        }
        for (const auto& child : currentEntry.children) {
            currentEntry.size += child.size;
        }   
        sort(currentEntry.children.begin(), currentEntry.children.end(), [](const Entry& a, const Entry& b) {
            return a.size > b.size || (a.size == b.size && a.type < b.type);
        });
    }
    return currentEntry;
}


void printEntry(const Entry& entry) {
    cout << entry.type << " ";
    if (entry.type == 'f') {
        cout << entry.size << " ";
    } else if (entry.type == 'd') {
        for (const auto& child : entry.children) {
            printEntry(child);
        }
        cout << "e ";
    }
}


int main() {
    Entry root = parseInput(cin);


    printEntry(root);
    cout << endl;


    return 0;
}

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


using namespace std;


struct TreeNode {
    char val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};




TreeNode* buildTree(const vector<int>& arr, int index) {
    if (index >= arr.size() || arr[index] == -1) return nullptr;  // 检查空节点


    TreeNode* node = new TreeNode('a' + arr[index]);
    node->left = buildTree(arr, 2 * index + 1);
    node->right = buildTree(arr, 2 * index + 2);
    return node;
}


string ans = "{";


void dfs(TreeNode* root, string path) {
    if (!root) return;


   
    path = root->val + path;




    if (!root->left && !root->right) {
        ans = min(ans, path);
        return;
    }


    dfs(root->left, path);
    dfs(root->right, path);
}


int main() {
    vector<int> arr = {1, 0, 3, 4, 5, -1, -1, -1, -1, -1, 2};  


    TreeNode* root = buildTree(arr, 0);
    dfs(root, "");


    cout << ans << endl;  // 
    return 0;
}

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>


using namespace std;


struct Task {
    int id;
    int arrival;
    int duration;
};


struct Compare {
    bool operator()(const Task& t1, const Task& t2) {
        return t1.duration > t2.duration;
    }
};


struct CompletedTask {
    int id;
    int completionTime;
};


int main() {
    vector<Task> tasks = {}; 

    sort(tasks.begin(), tasks.end(), [](const Task& t1, const Task& t2) {
        return t1.arrival < t2.arrival;
    });


    int currentTime = 0;
    priority_queue<Task, vector<Task>, Compare> pq;
    vector<CompletedTask> completedTasks;


    int taskIndex = 0;
    Task currentTask = {0, 0, 0};


    while (taskIndex < tasks.size() || !pq.empty() || currentTask.id != 0) {
        while (taskIndex < tasks.size() && tasks[taskIndex].arrival <= currentTime) {
            pq.push(tasks[taskIndex]);
            taskIndex++;
        }


        if (!pq.empty()) {
            if (currentTask.id == 0 || pq.top().duration < currentTask.duration) {
                if (currentTask.id != 0) {
                    pq.push(currentTask);
                }
                currentTask = pq.top();
                pq.pop();
            }
            currentTask.duration--;
            currentTime++;


            if (currentTask.duration == 0) {
                completedTasks.push_back({currentTask.id, currentTime});
                currentTask = {0, 0, 0};
            }
        } else if (currentTask.id != 0) {
            currentTask.duration--;
            currentTime++;
            if (currentTask.duration == 0) {
                completedTasks.push_back({currentTask.id, currentTime});
                currentTask = {0, 0, 0};
            }
        } else {
            currentTime = tasks[taskIndex].arrival;
        }
    }


    sort(completedTasks.begin(), completedTasks.end(), [](const CompletedTask& a, const CompletedTask& b) {
        return a.completionTime < b.completionTime;
    });


 
    for (const auto& ct : completedTasks) {
        cout <<   ct.id <<  ct.completionTime << endl;
    }
    return 0;
}

#笔试##秋招#
全部评论
牛逼,我直接昏厥
1 回复 分享
发布于 2023-08-14 21:31 黑龙江
大佬可以说一下这三道题都是什么题型嘛
点赞 回复 分享
发布于 2023-08-15 20:51 陕西
牛逼,头晕
点赞 回复 分享
发布于 2023-08-15 14:05 四川
大佬第二题它好像没有把所有空位的-1都写出来,还能直接用2i+1和2i+2吗,我写到这懵了就没写了
点赞 回复 分享
发布于 2023-08-15 10:41 浙江
我直接懒得写了好麻烦
点赞 回复 分享
发布于 2023-08-15 09:47 北京
话说第一题的最后一个用例是不是少了一个e呀 d和e应该是成对出现的呀
点赞 回复 分享
发布于 2023-08-15 01:48 广东
tql
点赞 回复 分享
发布于 2023-08-15 00:08 广东
第一题不是不能直接用api吗
点赞 回复 分享
发布于 2023-08-14 21:37 广东
大佬
点赞 回复 分享
发布于 2023-08-14 21:27 北京
哦那个sort那个地方写错了 应该是<号 升序排列
点赞 回复 分享
发布于 2023-08-14 21:18 上海

相关推荐

04-05 21:13
邯郸学院 Java
点赞 评论 收藏
分享
03-21 08:46
已编辑
门头沟学院 C++
一个什么都不会的学生:当你有硕士学历的时候HR会说就是比本科生强
点赞 评论 收藏
分享
评论
7
25
分享

创作者周榜

更多
牛客网
牛客企业服务