zoukankan      html  css  js  c++  java
  • 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;
    }
    

    大功告成!

  • 相关阅读:
    并发与并行的区别
    Java 中的JSON 字符串
    java spark list 转为 RDD 转为 dataset 写入表中
    SparkConf和SparkContext
    Java 中清空map
    java JSON的使用和解析
    presto计算日期间隔天数或者小时间隔——date_diff函数使用
    Nginx 负载均衡配置
    Nginx 反向代理配置示例(conf文件配置)
    前端同学 linux常用指令汇总
  • 原文地址:https://www.cnblogs.com/returnG/p/13089497.html
Copyright © 2011-2022 走看看