首页 > 代码库 > PAT 1056 Mice and Rice

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:\n\t");    while (cur != player.end() && cnt > 0) {        --cnt;        //printf(" %d(%d)", *cur, W[*cur]);        if (W[*cur] >= wmax) {            wmax = W[*cur];            ret = cur;        }        cur++;    }    //printf("\n");    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\n", *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\n", 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;}

有点烦啊

PAT 1056 Mice and Rice