写在前面

  • 思路分析

    • np为老鼠数量, ng为每组最多g个老鼠。
    • 先给出np个老鼠重量,再给出老鼠初始顺序
    • 每ng个老鼠分为1组,对于每组老鼠,选出最重的那个,晋级下1轮比赛,然后依次再以np个老鼠1组分类,然后选出重量最大的。直到只剩下1只老鼠,排名为1
    • 实现分析:
      • 结构体node表示老鼠,weight、index:排名顺序老鼠下标、index0排名前老鼠下标、rank最终要输出的老鼠排名
      • 将所有老鼠按照排名后顺序依次放入队列中,对于队列中的每1个老鼠,按照分组后选择最大
        重量的比赛规则,将每次分组获得第1的老鼠放入队列尾部
      • 当前剩下老鼠可以分为group组,这1组⾥没有晋级的老鼠排名为group+1
      • group计算方法:如果当前轮次人数正好可以被每组ng人的ng整除,那么就有人数/ng个组。如果不能被整除,就有剩下来的⼀些⽼鼠分为1组,就是人数/ng + 1组
      • cnt用来控制当前组内第几个人,如果cnt能够被ng整除说明已经是下1组,就cnt = 0;
      • 否则cnt不断++,同时将最重的老鼠体重赋值给maxn,最重老鼠的node赋值给maxnode
      • 最后将结果结构体按照index0排序,排序后按序输出
  • 理解题意有一定难度,细节处理耗费大量时间
    • 读题费老大劲,,,
    • 初步学习
    • 可迭代调试,进1步加深理解

测试用例

  • input:
    11 3
    25 18 0 46 37 3 19 22 57 56 10
    6 0 8 7 10 5 9 1 4 2 3output:
    5 5 5 2 5 5 5 3 1 3 5
    

ac代码

  • #include <iostream>
    #include <queue>
    #include <vector>
    #include <algorithm>
    using namespace std;
    struct node
    {int weight, index, rank, index0;
    };
    bool cmp1(node a, node b)
    {return a.index0 < b.index0;
    }
    int main()
    {int n, g, num;scanf("%d%d", &n, &g);vector<int> v(n);vector<node> w(n);for(int i = 0; i < n; i++)scanf("%d", &v[i]);for(int i = 0; i < n; i++){scanf("%d", &num);w[i].weight = v[num];w[i].index = i;w[i].index0 = num;}queue<node> q;for(int i = 0; i < n; i++)q.push(w[i]);while(!q.empty()){int sizes = q.size();if(sizes == 1){node tmp = q.front();w[tmp.index].rank = 1;break;}// 计算组数int group = sizes / g;if(sizes % g != 0)group += 1;node maxnode;int maxn = -1, cnt = 0;for(int i = 0; i < sizes; i++){node tmp = q.front();w[tmp.index].rank = group + 1;q.pop();cnt++;if(tmp.weight > maxn){maxn = tmp.weight;maxnode = tmp;}if(cnt == g || i == sizes - 1){cnt = 0;maxn = -1;q.push(maxnode);}}}sort(w.begin(), w.end(), cmp1);for(int i = 0; i < n; i++){if(i != 0) printf(" ");printf("%d", w[i].rank);}return 0;
    }
    

A1056 Mice and Rice (25 分| queue用法,附详细注释,逻辑分析)相关推荐

  1. 1056 Mice and Rice (25分)

    1056 Mice and Rice (25分) 参考 题目读了好久都没读明白...看了上方链接的解释才懂什么意思,感觉好绕... 第二行为0~n-1的老鼠重量,第三行为合并的次序序号,最后按0到n- ...

  2. 1056 Mice and Rice (25 分)【难度: 一般 / 知识点: 模拟】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805419468242944 这里是用队列模拟. #include< ...

  3. PTA 1056 Mice and Rice (25分)

    题面:自己读,甲级题面自己读; 神奇的做法 一开始以为就是一个堆栈的模拟 没考虑到复杂度写到一半发现 查找中位数的复杂度实在是太高了O(nnlog) 那不就裂开了嘛 后来想到 中位数 可以单独维护一个 ...

  4. 1056. Mice and Rice (25)

    1056. Mice and Rice (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Mice an ...

  5. 1056 Mice and Rice (25 point(s))

    Matter: 1.很难受,这个想了好长时间,发现没读懂题目.second line 是每个老鼠的质量(W​i​​ is the weight of the i-th mouse),third lin ...

  6. 华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

    一.题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏. 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格,然后获得一次选房子的机会,直到所有房子都被选完,房子最多的人获胜. 跳房子的过程 ...

  7. 校验注解:@Valid 和 @Validated区别与用法(附详细案例)

    一.案例对象 本文章会以案例为主,讲解@Valid 和 @Validated这两个注解的区别与用法. 1.首先,创建一个学生对象,如下: import lombok.Data;/*** 学生对象*/ ...

  8. 1088 三人行 (20 分)(附详细注释,逻辑分析)

    写在前面 逻辑题 丙的类型分析存在错误 输出值分析错误,输出甲的值,不是M的值 除去以上2点,题目相对简单,5分钟a题 细节问题,最耗时间 abs绝对值函数 print 函数类型错误(double型) ...

  9. 华为OD机试真题 Java 实现【二维伞的雨滴效应】【2023 B卷 100分】,附详细解题思路

    目录 一.题目描述 二.输入描述 三.输出描述 四.解题思路 五.Java算法源码 六.效果展示 1.输入 2.输出 3.说明 大家好,我是哪吒. 做技术,我是认真的,立志于打造最权威的华为OD机试真 ...

最新文章

  1. python英语-50 行代码,实现中英文翻译
  2. Microsoft发布用于统一事件处理的Azure事件网格
  3. svm核函数gamma参数_非线性SVM与核函数
  4. tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!
  5. Docker 入门尝鲜
  6. PyTorch 1.0 中文文档:序列化的相关语义
  7. context-param标签含义及与init-param标签的异同(转)
  8. 为什么华为a1路由器网速变慢_路由器需要每天都关吗?看完专家的解释恍然大悟...
  9. 信息安全法律法规知识点汇总(郑大信安个人总结版)
  10. KVM虚拟化平台搭建实操+KVM理论详解
  11. 拥有“中国诺贝尔奖”的未来论坛,会告诉我们怎样的未来? | 未来论坛 2017...
  12. 未转变者入侵服务器后台,未转变者(unturned)联机服务器创建方法
  13. size与capacity的区别
  14. JavaWeb个人信息修改及修改密码
  15. 车载以太网 > 百兆100BaseT1转TX盒子拆解(包含3类产品)
  16. 51群接龙-社区社群团购专业营销工具
  17. file.getOriginalFilename()
  18. 一个sql语句的编写 写出不及格门数大于等于2的学生的姓名和平均成绩
  19. 大佬们的“受锤”往事
  20. Tapdata 创始人唐建法:以秒级响应速度,为企业提供实时数据服务 | 阿里云云原生加速器特别报道

热门文章

  1. python学习笔记(空气质量指数)
  2. vagrant+virtualbox搭建centos7
  3. Uniapp自定义相机界面
  4. anaconda3最新安装教程
  5. Python爬虫入门教程31:爬取猫咪交易网站数据并作数据分析
  6. 二分图的Hall定理
  7. Java序列化与反序列化(一)
  8. Java - 反射机制
  9. 基于SpringBOOT的订餐系统
  10. 使用python的turtle画国旗