使用队列每一组最大的进队该组其余元素出队并生成排名排名等于当前组数加1。需要注意因为最后一组可能不足Ng个因此在处理最后一组时需要计算该组老鼠数而不能认为是Ng个否则可能会把下一轮的第一组读入。#includeiostream#includealgorithm#includequeueusingnamespacestd;structprog{intrank;intweight;};intmain(){intn,g;cinng;queueintq;prog player[n];for(inti0;in;i)cinplayer[i].weight;for(inti0;in;i){intorder;cinorder;q.push(order);}while(q.size()1){intgroups(q.size()%g0)?q.size()/g:q.size()/g1;inti0;intsizeq.size();//记录参与这一轮的老鼠数while(igroups){intposq.front();q.pop();intterminal(size-i*gg)?size-i*g:g;//若最后一组不足Ng个for(intj1;jterminal;j){if(player[q.front()].weightplayer[pos].weight){player[pos].rankgroups1;posq.front();}else{player[q.front()].rankgroups1;}q.pop();}q.push(pos);i;}}player[q.front()].rank1;for(inti0;in-1;i)coutplayer[i].rank ;coutplayer[n-1].rank;return0;}分析起来有点绕并且不想思考