2026/4/18 6:00:43
网站建设
项目流程
任县建设局网站,WordPress图片生成文章,新手wordpress添加注册表,建网站备案需要的材料这一题的大意是说Np个老鼠参加比赛#xff0c;相邻Ng个分成一组进行选拔#xff0c;每组中选择最重的老鼠晋级#xff0c;没有晋级的老鼠的排名一个样#xff0c;按照这种思路给所有的老鼠进行排名#xff0c;如果最后剩下不足Ng个仍可以分成一组#xff0c;排名是跟分组…这一题的大意是说Np个老鼠参加比赛相邻Ng个分成一组进行选拔每组中选择最重的老鼠晋级没有晋级的老鼠的排名一个样按照这种思路给所有的老鼠进行排名如果最后剩下不足Ng个仍可以分成一组排名是跟分组个数相关。这一题最开始我不理解的就是怎么确定排名后来才明白先算出当前的组数然后排名等于组数1用测试样例验证是符合的。我们可以采用队列按照题目要求的顺序来保存老鼠的体重和索引然后对一个个出队在出队的过程中我们找最大的体重和与之对应的索引同时给老鼠排名每Ng个我们把这Ng个中最重的老师保存到一个新的队列中这样遍历完一轮队列就可以把所有的晋级的老师放入新的队列中当当前队列为空之后我们可以把新队列中的晋级的老鼠再赋值回去。循环往复即可。完整代码如下#includebits/stdc.h#includeiostreamusingnamespacestd;//每个老鼠的目标是尽可能的吃的多去成为一个胖老鼠// 玩的顺序是随机的对应Np个人来说// 每NG个程序员组成一个队伍// 最胖的老鼠进入下一个顺序// 所由的失败者是相同的排名// Ng个赢家再组成一个队伍去找最后的赢家//给出体重和最初的排序intNp;intNg;structnode{intw;intorder;}n[1005];intans[1005];intorder[1005];boolflag;queuenodeq;intmain(){cinNpNg;for(inti0;iNp;i){intx;cinx;n[i].wx;}for(inti0;iNp;i){intx;cinx;order[i]x;n[x].orderx;}for(inti0;iNp;i){q.push(n[order[i]]);}intgroup;if(Np%Ng0){groupNp/Ng;}else{groupNp/Ng1;}intindex0;intcnt0;intmaxx0;// coutgroupendl;queuenodetemp;while(!q.empty()){node curq.front();//coutcur.orderendl;q.pop();ans[cur.order]group1;cnt;if(cur.wmaxx){maxxcur.w;indexcur.order;}if(cntNg){temp.push(n[index]);cnt0;maxx0;index0;}if(q.empty()cnt0){temp.push(n[index]);cnt0;maxx0;index0;intgroupnumbertemp.size();if(groupnumber%Ng0){groupgroupnumber/Ng;}else{groupgroupnumber/Ng1;}}if(q.empty()){//说明刚好正分qtemp;intgroupnumbertemp.size();if(groupnumber%Ng0){groupgroupnumber/Ng;}else{groupgroupnumber/Ng1;}while(!temp.empty()){temp.pop();}if(q.size()1){ans[q.front().order]1;break;}}}for(inti0;iNp;i){if(i0){coutans[i];}else{cout ans[i];}}return0;}总结这一题是队列模拟只要弄清楚题意按逻辑模拟即可