L2-057 姥姥改作业 - java

L2-057 姥姥改作业


语言 时间限制 内存限制 代码长度限制 栈限制
Java (javac) 600 ms 512 MB 16KB 8192 KB
Python (python3) 400 ms 256 MB 16KB 8192 KB
其他编译器 400 ms 64 MB 16KB 8192 KB

题目描述:

在没有拼题 A 的很久很久以前,姥姥不得不人工批改学生们交上来的大量作业。有些学生的作业写得实在太乱了,姥姥一眼看到就血压飙升,赶紧放到一边,等冷静下来再说...... 简而言之面对 n n n 本学生作业,姥姥批改作业的策略是这样的:

  • 为每一本作业定义一个"混乱指数" c i ( i = 1 , ⋯ , n ) c_i(i=1,⋯,n) ci(i=1,⋯,n);
  • 为自己定义一个不可以接受的混乱指数阈值 T T T;
  • 当看到一本作业的 c i > T c_i > T ci>T,则先放到一边,即将这个作业本叠放在自己左右手边的作业本堆 S 左 S_左 S左上;
  • 对于 c i ≤ T c_i \le T ci≤T 的作业,批改之后叠放在自己左右手边的作业本堆 S 右 S_右 S右上;
  • 当面前没有待批改的作业本时,如果左手边还有一堆作业本,则调整自己的阈值 T T T 为这堆作业的混乱指数的平均值的一半,即 T = ⌊ ∑ c i ∈ S 左 c i / n 左 ⌋ T = \left \lfloor \sum_{c_{i} \in S_{左}}{c_{i} / n_{左}} \right \rfloor T=⌊∑ci∈S左ci/n左⌋,其中 n 左 n_左 n左为 S 左 S_左 S左 中作业本的数量。然后开始批改。
  • 重复上述步骤,直到所有作业都被批改完成。

问:姥姥批改作业的顺序是怎样的?

声明:本题仅限人类解答。

输入格式:

输入第一行给出 2 2 2 个不超过 10 3 10^3 103的正整数: n n n 为作业本的数量, T T T 为姥姥可以接受的混乱指数阈值。随后一行给出 n n n 个不超过 10 3 10^3 103 的非负整数,按原始作业堆自顶向下的顺序,第 i i i 个数字对应编号为 i i i 的作业的混乱指数 ( i = 1 , ⋯ , n ) (i=1,⋯,n) (i=1,⋯,n)。同行数字间以一个空格分隔。

输出格式:

按照姥姥批改作业的顺序,在一行中输出每个作业本的编号。数字间以一个空格分隔,行首尾不得有多余空格。

输入样例:

10 2

233 8 1 6 0 745 2 555 42 3

输出样例:

3 5 7 10 9 4 2 1 8 6


  1. 在一堆作业中去看其混论指数 c i c_i ci与自己可以接受的混乱指数阈值 T T T。
    • 如果 c i > T c_i > T ci>T, 那么就表示当前这个作业暂时无法接受,需要放在左侧,等下再批改
    • 否则 c i < = T c_i <= T ci<=T, 那么就表示当前这个作业可以接受,那么把他放在右侧
  2. 然后再去看所有左侧未批改的作业中,重新设置自己的阈值 T T T为未批改作业的混乱指数的平均值
    • 阈值 T = ⌊ ∑ c i ∈ S 左 c i / n 左 ⌋ = ⌊ ( ∑ c i ∈ S 左 c i ) / n 左 ⌋ T = \left \lfloor \sum_{c_{i} \in S_{左}}{c_{i}} / n_{左} \right \rfloor = \left \lfloor (\sum_{c_{i} \in S_{左}}{c_{i}} ) / n_{左} \right \rfloor T=⌊∑ci∈S左ci/n左⌋=⌊(∑ci∈S左ci)/n左⌋
  3. 然后重复上述操作,直至所有作业全都批改完
  4. 最后依次输出批改作业的顺序

emmmmmmm

按照题目意思模拟即可。

  • 列表q :存储所有为批改的作业
  • 栈st :存储当前阈值为 T T T时,超过阈值 T T T的所有作业
  • 列表list: 存储当前批改作业的顺序
  1. 依次遍历 列表q 中所有的作业
    • 如果 当前作业的混乱指数 c i c_i ci 与 自己的阈值 T T T
      • 其中 c i > T c_i > T ci>T 的内容放入到 栈st 中
      • 其中 c i < = T c_i <= T ci<=T 的内容放入到 列表list 中
    • 遍历完所有作业时,就表示所有作业都批改过,那么就清空 列表q 的所有内容。
  2. 如果 栈st 中还有元素,那么将 栈st 中的元素依次放入到 列表q 中 并 计算其累加和,求的平均值

java 复制代码
import java.io.PrintWriter;
import java.util.*;

public class Main
{
    static class edge
    {
        int c, id; // 存储当前作业的混乱指数与编号

        public edge(int c, int id)
        {
            this.c = c;
            this.id = id;
        }
    }

    static Stack<edge> st = new Stack<>(); // 存储当前超过阈值的作业
    static List<edge> q = new LinkedList<>(); // 存储当前未超过阈值的作业
    static List<edge> list = new ArrayList<>(); // 存储批改作业的顺序

    static void solve(int t)
    {
        for (edge u : q) // 依次遍历所有为批改的作业
        {
            if (u.c <= t) list.add(u);
            else st.push(u);
        }
        q.clear(); // 清空未批改的作业
    }

    static int get()
    {
        int ans = 0; // 统计无法批改作业的混乱指数和
        int cnt = 0; // 统计无法批改作业的个数
        while (!st.isEmpty()) // 遍历所有无法批改的作业
        {
            edge u = st.pop(); // 取出一个无法批改的作业
            q.add(u); // 添加到未批改的作业中
            ans += u.c;
            cnt++;
        }
        return ans / cnt;
    }


    public static void main(String[] args)
    {
        int n = sc.nextInt(), t = sc.nextInt();
        for (int i = 1; i <= n; i++)
        {
            int c = sc.nextInt();
            q.add(new edge(c, i)); // 添加未批改的作业
        }

        while (!q.isEmpty()) // 如果存在未批改的作业
        {
            solve(t);

            if (st.isEmpty()) break; // 如果没有无法批改的作业,则退出循环

            t = get(); // 获取无法批改作业的混乱指数的平均值
        }

        for (int i = 0; i < list.size(); i++)
        {
            if (i != 0) out.print(" ");
            out.print(list.get(i).id);
        }

        out.flush();
        out.close();
    }

    static Scanner sc = new Scanner(System.in);
    static PrintWriter out = new PrintWriter(System.out);
}

ArrayList
ArrayList

Stack
Stack
Stack


如果有说错的 或者 不懂的 尽管提 嘻嘻

一起进步!!!


闪现
天梯赛

相关推荐
努力实干8 小时前
第二阶段 · 第 7 课:C++ 多线程与线程安全
开发语言·c++·安全
MetaLite8 小时前
Spring Boot 加了 @Valid,嵌套参数为什么还没校验?
java·spring boot·后端
半杯咖啡半行码8 小时前
QML与 Qt Quick入门实战:从零基础到 C++ 双向通信详解
java·qt·交互
霸道流氓气质8 小时前
Lingua 语言检测库:n-gram 统计模型、置信度阈值调优与 Spring Boot 分层检测管道的生产级实战
java·spring boot·后端
爱聊灵光的维C8 小时前
C语言初阶:关于函数设计的详细讲解和注意事项
c语言·开发语言·青少年编程·蓝桥杯·学习方法
文丑颜不良啊9 小时前
LeetCode1281~1300题目解析
java·leetcode
熊猫钓鱼>_>9 小时前
上架审核常见驳回与隐私合规清单:过审前先自查这 8 条【鸿蒙心迹】
开发语言·前端·华为·华为云·harmonyos·openharmony·ai制作
missile1119 小时前
# HDR 算法 ISP 通路客制化方案(G100 / mt6789)
java·前端·javascript
SEO_juper9 小时前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
geovindu9 小时前
rust: Read-Write Lock Pattern
开发语言·后端·设计模式·rust·读写锁模式·同步型模式