1056 Mice and Rice (25 分)难度: 一般 / 知识点: 模拟

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1056 Mice and Rice (25 分)难度: 一般 / 知识点: 模拟相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805419468242944

这里是用队列模拟。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
map<int,int>mp;  //体重映射编号
map<int,int>ans; //存一下答案
queue<int>q,backup,c;// c是一个空的队列,便于队列清空
int main(void)
{
    int n,m; cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a[i],mp[a[i]]=i;
    for(int i=0;i<n;i++) cin>>b[i],q.push(b[i]);
    while(q.size()>1)
    {
        backup=q; q=c;
        int len=backup.size();//存一下当前的人数
        while(backup.size())//每一轮
        {
            int cnt=-1e9;
            int rating=len/m+1;//有多少人晋级+1 就是败者的排名
            if(len%m) rating++;
            for(int i=0;i<m&&backup.size();i++)//循环一组,找到组中最大的    
            {
                auto t=backup.front(); backup.pop();
                cnt=max(cnt,a[t]);
                ans[t]=rating;
            }
            q.push(mp[cnt]);//晋级的
        }
    }
    ans[q.front()]=1;//最后胜者的排名为1
    for(int i=0;i<n;i++) 
    {
        cout<<ans[i];
        if(i!=n-1) cout<<" ";
    }
    return 0;
}

以上是关于1056 Mice and Rice (25 分)难度: 一般 / 知识点: 模拟的主要内容,如果未能解决你的问题,请参考以下文章

A1056Mice and Rice (25分)

PAT甲级1056 Mice and Rice (25 分)

PAT 1056 Mice and Rice (25)

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

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

1056 Mice and Rice