ber_ker 2024-05-05 04:09 采纳率: 50%
浏览 0

站外问题水题【782643873】

img

uu我饿风格月完工腐恶跳舞额发他王启发对呀特王启发对呀特发乌鸦退费武器研发他无非无法推特乌鸦范玮琪放弃要他与非

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-05 04:10
    关注

    引自免费微信小程序:皆我百晓生

    这个问题可以通过贪心算法解决。我们需要找到一个方法来分配每个子任务的测试点数量,使得满足所有子任务的最少测试点要求,并且总测试点数不超过m。同时,我们要最大化最小的qi / pi 比率。

    以下是详细的步骤:

    1. 对于每个子任务 (Pi, Wi),计算每个任务的优先级 qi / Pi = Wi / Pi。
    2. 将这些子任务按照优先级从高到低排序。
    3. 初始化一个空列表 qs 来存储每个子任务选择的测试点数。
    4. 从最高优先级开始遍历子任务,每次选择一个子任务并将其测试点数设置为Wi(因为Wi是最小需求)。
    5. 如果当前子任务的选择使得总测试点数超过了m,则减少最后一个被选中的子任务的测试点数,直到总测试点数小于等于m为止。
    6. 继续这个过程,直到所有的子任务都被处理。
    7. 计算最小的qi / pi比率,然后将结果转换为最简分数形式输出。

    下面是一个C++实现:

    1. #include <iostream>
    2. #include <vector>
    3. #include <algorithm>
    4. #include <cmath>
    5. struct Subtask {
    6. int Pi, Wi;
    7. double priority;
    8. bool operator<(const Subtask& other) const {
    9. return priority > other.priority;
    10. }
    11. };
    12. std::pair<int, int> gcd(int a, int b) {
    13. if (b == 0) {
    14. return {a, 1};
    15. } else {
    16. auto result = gcd(b, a % b);
    17. return {result.second, result.first};
    18. }
    19. }
    20. int main() {
    21. int n, m;
    22. std::cin >> n >> m;
    23. std::vector<Subtask> tasks(n);
    24. for (int i = 0; i < n; ++i) {
    25. std::cin >> tasks[i].Pi >> tasks[i].Wi;
    26. tasks[i].priority = static_cast<double>(tasks[i].Wi) / tasks[i].Pi;
    27. }
    28. std::sort(tasks.begin(), tasks.end());
    29. std::vector<int> qs(n, 0);
    30. int total_qi = 0;
    31. for (auto& task : tasks) {
    32. int qi = task.Wi;
    33. while (total_qi + qi > m) {
    34. --qs[qs.size() - 1];
    35. total_qi -= qi;
    36. }
    37. total_qi += qi;
    38. qs[tasks.size() - 1 - i] = qi;
    39. }
    40. if (total_qi < m) {
    41. std::cout << "Zip file size too big after extraction.Poor M!\n";
    42. } else {
    43. int min_ratio_numerator = INT_MAX;
    44. int min_ratio_denominator = INT_MAX;
    45. for (int qi : qs) {
    46. if (qi != 0 && qi < min_ratio_numerator * tasks[qs.size() - 1 - i].Pi) {
    47. min_ratio_numerator = qi;
    48. min_ratio_denominator = tasks[qs.size() - 1 - i].Pi;
    49. }
    50. }
    51. auto gcd_result = gcd(min_ratio_numerator, min_ratio_denominator);
    52. min_ratio_numerator /= gcd_result.first;
    53. min_ratio_denominator /= gcd_result.first;
    54. std::cout << min_ratio_numerator << "/" << min_ratio_denominator << "\n";
    55. for (int qi : qs) {
    56. std::cout << qi << " ";
    57. }
    58. std::cout << "\n";
    59. }
    60. return 0;
    61. }

    这段代码首先读取输入,然后创建一个结构体数组表示子任务及其优先级。接着进行排序,然后根据优先级分配测试点数。在分配过程中,如果超出限制,则回溯减少之前分配的测试点数。最后计算并输出最小的qi / pi比率以及对应的qi列表。

    展开全部

    评论 编辑记录
  • GISer Liu 2024-05-05 04:11
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的问题描述,我理解到你需要解决的是一个涉及到多个主题的问题。以下是我对解决这个问题的思路和方案:

    问题分析:

    1. 问题描述混乱 :提供的问题描述似乎是一系列无关的文字,缺乏明确的问题陈述和上下文。
    2. 需求不清晰 :并没有清晰的问题陈述或指示,不明确需要解决什么问题。

      解决思路:

    3. 梳理问题 :首先需要梳理提供的文字,尝试理解其背后可能隐藏的问题或需求。
    4. 确认需求 :明确用户需要解决的问题,可能需要与用户进行沟通以获取更多信息。
    5. 搜索相关信息 :根据文字中提到的关键词,进行自主搜索,尝试找到与之相关的信息或解决方案。
    6. 提出解决方案 :基于搜索结果和问题的理解,提出具体的解决方案或建议。

      可能的解决方案:

    7. 问题理解与沟通 :与提问者进一步沟通,确认问题背后的真实需求。
    8. 关键词搜索 :针对问题描述中提到的关键词,进行网络搜索,寻找相关信息。
    9. 问题分类与解决 :根据搜索结果,对问题进行分类和分析,提出具体的解决方案。

      注意事项:

    10. 明确需求 :在与提问者沟通时,确保理解其真实需求,以便提供更有效的解决方案。
    11. 尊重用户意愿 :虽然用户要求只能单向提供解决方案,但在实际应用中,应尊重用户的意愿并尽量与其互动,以更好地理解问题。
      以上是我对解决这个问题的思路和方案的初步分析。如果你能提供更多背景信息或明确的问题陈述,我可以给出更具体的解决方案。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    评论
  • 关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    抱歉,我无法理解这个问题。它似乎只是一组没有意义的词汇和短语的随机组合。请提供更明确的问题。

    评论
  • DTcode7 前端领域优质创作者 2024-05-18 17:33
    关注

    答案引用自chatgpt生成,望对题主有所帮助/启发;若有帮助,还望采纳!

    站外问题水题【782643873】

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部