行业资讯
PAT甲级 1056 Mice and Rice 模拟+排序
Solution题目要求np为老鼠的数量ng为每组最多g个老鼠。先给出np个老鼠的重量再给出老鼠的初始顺序处于第i个位置的老鼠是第j号j从0开始。每ng个老鼠分为一组对于每组老鼠选出最重的那个晋级下一轮比赛然后依次再以np个老鼠一组分类然后选出重量最大的。直到只剩下一只老鼠排名为1。输出为老鼠的排名这个排名是按照原输入老鼠的顺序输出的。代码如下#includeiostream#includealgorithm#includequeueusing namespace std;structnode{intweight;//weight重量intindex;//按照排名后的顺序的老鼠的下标intf_rank;//最终排名intindex0;//index0是排名前老鼠的下标};boolcmp(node a,node b){returna.index0b.index0;}intnp,ng;//np个参赛选手、ng个每组的人数intw[1005];intmain(){cinnpng;for(inti0;inp;i){cinw[i];}vectornodevec(np);intnum;for(inti0;inp;i){cinnum;vec[i].indexi;vec[i].weightw[num];vec[i].index0num;}queuenodeq;for(inti0;inp;i){q.push(vec[i]);}while(!q.empty()){intq_sizeq.size();if(q_size1){node tempq.front();vec[temp.index].f_rank1;break;}intgroupq_size/ng;if(q_size%ng!0){group1;}node maxnode;//晋级的结点intmaxl-1,cnt0;for(inti0;iq_size;i){node tempq.front();vec[temp.index].f_rankgroup1;q.pop();cnt;if(temp.weightmaxl){maxltemp.weight;maxnodetemp;}if(cntng||iq_size-1){cnt0;maxl-1;q.push(maxnode);}}}sort(vec.begin(),vec.end(),cmp);for(inti0;inp;i){if(i!np-1){coutvec[i].f_rank ;}else{coutvec[i].f_rank;}}return0;}
郑州网站建设
网页设计
企业官网