pat1056Mice and Rice (25)

题意分析:

(1)给出一组数代表每个人的初始程序的“得分”,然后按照给出的一个任意排列的顺序,在这个排列中按照顺序每NG个人一组进行PK,每一组中最大的那个人PK胜出进入下一轮,剩余的人本轮淘汰,并且排名相同。不足NG人的小组按照一个小组计算

(2)相信绝大多数人都没有弄清楚这题到底是怎么得出最终的计算排名,原因在以下几个方面:

①那个排列就是出场的顺序,也就是每个人按自己的序号出场的顺序(6号第一个出场),并不是说第0号的人第6个出场。相信大多数人被坑在了这里

②其次就是如何通过晋级来确定本轮的名次,这个也是大多数人不理解的地方:其实并不需要确定了第一名之后才去确定第二名、第三名...因为每个小组都会晋级一人,几个小组就会晋级几个人,剩余的人排名肯定都是在这些人之后,那就好办了:M个小组内PK,M个人晋级,剩余的人排名就都是M+1.

(3)根据(2),因为每一轮都会有晋级,并且进入下一轮,因此可以使用队列来模拟这个过程,每组胜出者进入下一个队列中。

可能坑点:

(1)理解出场顺序出现了混淆

#include 
#include 
#include 
using namespace std;

int main()
{
    int N,M;
    cin>>N>>M;
    const int num=N;
    int mouse[num];
    int rank[num];
    int i=0;
    while(i order;
    int t=0;
    int j=0;
    while(j>t;
        order.push(t);
        j++;
    }
    while(order.size()!=1)
    {
        int gamecount=order.size()/M+(order.size()%M==0?0:1);
        int currentRank=gamecount+1;
        queuetemp;
        for(int i=0;imax)
                {
                    max=mouse[index];
                    rank[maxindex]=currentRank;
                    maxindex=index;
                }
                else
                {
                    rank[index]=currentRank;
                }
            }
            temp.push(maxindex);
        }
        order=temp;
    }
    rank[order.front()]=1;
    int first=1;
    for(int k=0;k



你可能感兴趣的:(PAT,C++,PAT,队列,排名,分组)