• A1056 Mice and Rice (25 分)


    根据题意作出思考如下图:

     

    可以发现,这个 fatest mouse 的筛选是一层一层下来的,每一层都将数组分为两部分——一部分继续下一轮筛选而另一部分执行记下排名就行。所以很自然能想到每一轮都会产生中间数据,这些中间数据需要变量记录下来,所以进一步思考如下图:

     

    遍历原数组,筛选出的下一轮数据保存到影子数组(中间数据),至于 loser 因为要记录排名所以也要保存下来——这里先随便用 vector 保存。可以用这个思路接着推演,最终得到的一个元素就是 fatest mouse。在这个过程中需要考虑 loser 的排名怎么记录比较方便,我这里是数 winers 有多少个,那么 loser 的排名就等于 winers 个数加一,如下图:

     

    综合上述思路,得到代码思路

    /* 伪码 */
    
    while (数组剩余长度不等于 1) {
        组 = 0; base = 0; end = 0;
        while (end < 数组剩余长度) {
            step = 数组剩余长度 - base < NG ? 数组剩余长度 - base : NG;
            end += step;
            sort(base, end, cmp);//cmp() 为递增序
            vector.push_back[base + 1, end);//将除最大值外其它元素追加到 vector
            max = 数组[base];
            数组[组++] = max;
            base = end;
        }
        func(vector 里所有元素名次 = 组 + 1);//这里就是将所有 loser 记下排名的处理步骤
        数组剩余长度 = 组;
        vector.clear();
    }

    点击获取完整代码

  • 相关阅读:
    Java 单测 回滚
    Java四种线程池的使用
    git gc
    Git 常用命令
    JPA 批量新增
    SpringData JPA 排除 扫描 exclude-filter 不能使用解决
    开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    深入浅出 RPC
    阿里 Java面试 知识点
    Eclipse Egit 安装
  • 原文地址:https://www.cnblogs.com/bEngi1/p/14375243.html
Copyright © 2020-2023  润新知