zoukankan      html  css  js  c++  java
  • PAT 1056 Mice and Rice

    #include <cstdio>
    #include <climits>
    #include <cstdlib>
    #include <vector>
    #include <list>
    
    using namespace std;
    
    list<int>::iterator group_pick(list<int> &player, list<int>::iterator &cur, int group_size, vector<int> &W) {
        int wmax = INT_MIN;
        list<int>::iterator ret = player.end();
        int cnt = group_size;
        //printf("check group:
    	");
        while (cur != player.end() && cnt > 0) {
            --cnt;
            //printf(" %d(%d)", *cur, W[*cur]);
            if (W[*cur] >= wmax) {
                wmax = W[*cur];
                ret = cur;
            }
            cur++;
        }
        //printf("
    ");
        return ret;
    }
    
    int main() {
    
        int N = 0, G = 0;
        scanf("%d%d", &N, &G);
        
        if (N < 1) return 0;
        
        vector<int> W(N,  0);
        vector<int> R(N, 0);
        vector<int> L;
        list<int> P;
        
        for (int i=0; i<N; i++) {
            scanf("%d", &W[i]);
        }
        for (int i=0; i<N; i++) {
            int t = 0;
            scanf("%d", &t);
            P.push_back(t);
        }
        
        int level = 0;
        int level_cnt = 0;
        
        list<int> tmp;
        auto cur = P.begin();
        // number of elements in P should be larger than 1 to perform reduce processing
        while (G > 1 && ++(cur = P.begin()) != P.end()) {
            tmp.clear();
            auto cur = P.begin();
            while (cur != P.end()) {
                list<int>::iterator fat = group_pick(P, cur, G, W);
                //printf("pick %d
    ", *fat);
                tmp.splice(tmp.end(), tmp, fat);
            }
            
            swap(tmp, P);
            auto iter = tmp.begin();
            while (iter != tmp.end()) {
                R[*(iter++)] = level;
                level_cnt++;
            }
            L.push_back(level_cnt);
            level_cnt = 0;
            level++;
        }
        // now there must be only one element in P, the final winner
        L.push_back(1);
        R[P.front()] = level;
        int sum = 0;
        for (int i=L.size() - 1; i>=0; i--) {
            //printf("level cnt: %d
    ", L[i]);
            int next_sum = sum + L[i];
            L[i] = sum + 1;
            sum  = next_sum;
        }
    
        int len = R.size();
        printf("%d", L[R[0]]);
        for (int i=1; i<len; i++) {
            printf(" %d", L[R[i]]);
        }
        return 0;
    }

    有点烦啊

  • 相关阅读:
    购物车实现原理
    百分百加载动画
    利用CORS实现跨域请求(转载)
    AMD与CMD(转载)
    移动端Web页面问题(转载)
    JQuery的一些简单功能
    js基础3
    Ajax完整篇(转载)
    js基础2
    阮一峰对js的见解(10大缺陷)
  • 原文地址:https://www.cnblogs.com/lailailai/p/4079163.html
Copyright © 2011-2022 走看看