PAT Mice and Rice

题目链接

题意:

​ 给定初始长度为np的序列级其排列顺序,以ng为周期,每次在周期内进行比较,只保留周期内最大的元素,重复操作直到只剩最后一个元素(即最大的元素),然后对其进行排名,同一批被刷掉的元素排名相同,计算排名时,前面如果有相同的元素也要算作两个来计。

思路:

​ 将读入的奶牛排好序,然后用队列模拟一遍去除奶牛的情况。模拟去除奶牛不难,但如何计算出排名是个问题。根据题意,不难发现,比如某次去除后,还剩下4个,那么被去除的元素排名为第5;同理,某次去除后还剩x个,那么被去除的元素的排名为第(x+1)个;设去除前的元素个数为x个,那么去除后的元素个数为ceil(x/ng);那么其排名为:ceil(x/ng)+1;所以每次模拟时以此更新一下就行了

100分AC代码:
#include <bits/stdc++.h>
using namespace std;
int np,ng;
int w[10000005];
int ans[10000005];
int main() {
    cin>>np>>ng;
    vector <int> q;
    vector <int> q2;
    for(int i=0;i<np;i++)cin>>w[i];
    for(int i=0;i<np;i++){
        int x;
        cin>>x;
        q.push_back(x);
    }
    while(1){
        for(int i=0;i<q.size();i++)ans[q[i]]=ceil((double)q.size()/ng)+1;
        if(q.size()==1){
            ans[q[0]]=1;
            break;
        }
        int j,ip,maxx=0;
        for(j=0;j<q.size();j++){
            if(maxx<w[q[j]]){
                maxx=w[q[j]];
                ip=q[j];
            }
            if((j+1)%ng==0){
                maxx=0;
                q2.push_back(ip);
            }
        }
        if(q.size()%ng!=0){
            q2.push_back(ip);
        }
        q.clear();
        for(int j=0;j<q2.size();j++)q.push_back(q2[j]);
        q2.clear();
    }
    for(int i=0;i<np;i++)cout<<ans[i]<<' ';
    return 0;
}

大功告成!

原文链接: https://www.cnblogs.com/returnG/p/13089497.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    PAT Mice and Rice

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/354512

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午8:44
下一篇 2023年3月2日 上午8:44

相关推荐