数据结构专题——队列的应用 A1056.Mice and Rice ( 25)

#include <bits/stdc++.h>
#include<math.h>
#include <string>
using namespace std;
const int maxn = 1010;
struct mouse{
    int weight;//质量
    int R;//排名
}mouse[maxn];
int main(){
    int np,ng,order;
    scanf("%d%d",&np,&ng);
    for(int i=0;i<np;++i){
        scanf("%d",&mouse[i].weight);
    }
    queue<int> q;//定义一个队列
    for(int i=0;i<np;++i){
        scanf("%d",&order);
        q.push(order);
    }
    int temp = np,group;//temp为当前轮的比赛总老鼠数,group为组数
    while(q.size() != 1){
        //计算group,即当前轮分为几组进行比赛
        if(temp % ng == 0){
            group = temp/ng;
        }else{
            group = temp/ng + 1;
        }
        //枚举每一组,选出该组老鼠中质量最大的
        for(int i = 0;i<group;++i){
            int k = q.front();//k存放该组质量最大的老鼠的编号
            for(int j =0;j<ng;++j){
                //在最后一组老鼠数不足NG时起作用,退出循环
                if(i * ng + j >= temp) break;
                int front = q.front();//队首老鼠编号
                if(mouse[front].weight > mouse[k].weight){
                    k = front;
                }
                mouse[front].R = group + 1;//该轮老鼠排名为group + 1
                q.pop();
            }
            q.push(k);
        }
        temp = group;//group只老鼠晋级,因此下轮总老鼠数为group
    }
    mouse[q.front()].R = 1;//当队列中只剩下1只老鼠时,令其排名为1
    //输出所有老鼠的信息
    for(int i=0;i<np;++i){
        printf("%d",mouse[i].R);
        if(i < np - 1){
            printf(" ");
        }
    }
    system("pause");
    return 0;
} 


数据结构专题——队列的应用 A1056.Mice and Rice ( 25)

原文地址:https://www.cnblogs.com/JasonPeng1/p/12208702.html

时间: 2024-12-08 21:20:10

数据结构专题——队列的应用 A1056.Mice and Rice ( 25)的相关文章

PAT 1056 Mice and Rice (25)

Mice and Rice is the name of a programming contest in which each programmer must write a piece of code to control the movements of a mouse in a given map. The goal of each mouse is to eat as much rice as possible in order to become a FatMouse. First

数据结构专题——队列

一.队列(queue)(可与栈对比进行学习) 思想:队列实现的是一种先进先出(first-in,first-out,FIFO)策略.(<算法导论>) 定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表(具有线性关系/前驱后继关系).(<大话数据结构>) 术语: 队列的两端:队头(head):进行删除操作的一端.队尾(tail):进行插入操作的一端. 操作:队列的插入操作(insert):入队(enqueue). 队列的删除操作(delete):出队(dequeue

PAT (Advanced Level) 1056. Mice and Rice (25)

简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<map> #include<queue> #include<string> #include<stack> #include<vector> using namespace std

【PAT甲级】1056 Mice and Rice (25 分)

题意: 输入两个正整数N和M(<=1000),接着输入两行,每行N个数,第一行为每只老鼠的重量,第二行为每只老鼠出战的顺序.输出它们的名次.(按照出战顺序每M只老鼠分为一组,剩余不足M只为一组,每组只能有一个胜者,其他老鼠排名均为这一轮胜者数量+1) 代码: #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int n,m;int a[1007],b[1007];int num;int ans[1

线段树--数据结构专题学习

这两周是数据结构专题的学习,,被专题的题目虐得死去活来== 线段树:简单的说就是把[1,n]的区间二分,[1,(1+n)/2]左子树,[(1+n)/2+1,n]右子树 就这样一直分下去,直到都是[x,x]这样的区间.这样就构成了一颗树了^-^ 有这样一棵树,我们就可以在节点中储存区间的和啊,区间内的最大值啊,最小值等等..这就是线段树的附加信息了,也是题目中的重点.. 我们可以用一个数组(长度为k)储存原区间的初始值,然后根据这个建树,所以这个树的节点数最多为4*K: 对于每个节点i,其左子树为

2014 UESTC暑前集训数据结构专题解题报告

A.Islands 这种联通块的问题一看就知道是并查集的思想. 做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作.给每个位置分配一个数字,方便合并集合.同时将这些数字也排一个序,降低枚举的复杂度.合并集合时向四周查询浮出水面但是没有合并到同一集合的点进行合并. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath&

简单数据结构之队列模拟

1 /************************************************************************************** 2 * Function : 模拟队列 3 * Create Date : 2014/04/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不

数据结构 - 链队列的实行(C语言)

数据结构-链队列的实现 1 链队列的定义 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已, 我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端结点,如下图所示. 空队列时,front和rear都指向头结点,如下图所示. 链队列的结构为: typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */ typedef struct QNode /* 结点结构 */ { QElemTy

数据结构 - 顺序队列的实行(C语言)

数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针:front指针指向队头元素,rear指针指向队尾元素的下一个位置,当front=rear时,为空队列,结构如下图所示. 假设是长度为5的数组,初始状态,空队列如下图左所示,front与 rear指针均指向下标为0的位置.然后入队a