zoukankan      html  css  js  c++  java
  • PAT甲题题解-1056. Mice and Rice (25)-模拟题

    有n个老鼠,第一行给出n个老鼠的重量,第二行给出他们的顺序。
    1.每一轮分成若干组,每组m个老鼠,不能整除的多余的作为最后一组。
    2.每组重量最大的进入下一轮。
    让你给出每只老鼠最后的排名。
    很简单,用两个数组模拟一下即可
    order1存储进入当前一轮老鼠的索引顺序
    order2存储进入下一轮老鼠的索引顺序

    如果当前有groups个组,那么会有groups个老鼠进入下一轮,则没有进入下一轮的排名都为groups+1
    如果只有一个组,那么最大的那个排名即为1。

    #include <iostream>
    #include <cstdio>
    #include <string.h>
    #include <algorithm>
    
    using namespace std;
    const int maxn=1000+5;
    
    struct Mice{
        int weight;
        int ranks;
    }mice[maxn];
    
    int order1[maxn];
    int cnt1=0;
    int order2[maxn];
    int cnt2=0;
    int main()
    {
        int n,m;
        scanf("%d %d",&n,&m);
        for(int i=0;i<n;i++){
            scanf("%d",&mice[i].weight);
        }
        for(int i=0;i<n;i++){
            scanf("%d",&order1[i]);
        }
        cnt1=n;
        int rRanks=0;
        int groups;
        while(1){
            rRanks++;
            cnt2=0;
            int maxw,maxid;
            groups=cnt1/m;
            if(cnt1%m!=0)
                groups++;
            for(int i=0;i<cnt1;i+=m){
                maxw=0;
                int v;
                for(int j=i;j<i+m&&j<cnt1;j++){
                   v=order1[j];
                    if(mice[v].weight>maxw){
                        maxw=mice[v].weight;
                        maxid=v;
                    }
                }
                for(int j=i;j<i+m&&j<cnt1;j++){
                    v=order1[j];
                    if(v!=maxid)
                        mice[v].ranks=groups+1;//有groups个组,那么晋级下一轮的就有groups个人,所有没晋级的并列第groups+1名。
                }
                order2[cnt2++]=maxid;
            }
            if(cnt1<=m){
                mice[maxid].ranks=1;
                break;
            }
            for(int i=0;i<cnt2;i++){
                order1[i]=order2[i];
            }
            cnt1=cnt2;
        }
        printf("%d",mice[0].ranks);
        for(int i=1;i<n;i++){
            printf(" %d",mice[i].ranks);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    脱壳基础知识入门
    补码的运算
    二补数
    原码 & 反码 & 补码 & 详解
    中国黑客传说:周景平——我是超级黑
    VB程序破解之API断点[bp __vbaVarTstEq]
    ecshop报错”Deprecated: Assigning the return value of…”解决办法
    Ecshop安装过程中的的问题:cls_image::gd_version()和不支持JPEG
    php 关于日期的一些计算
    localStorage使用总结,页面跳转,保存值
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/6519890.html
Copyright © 2011-2022 走看看