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


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

一起进步!!!


闪现
天梯赛

相关推荐
Flynt1 小时前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
plainGeekDev2 小时前
Activity 间传值 → Navigation 参数
android·java·kotlin
plainGeekDev2 小时前
onActivityResult → ActivityResult API
android·java·kotlin
Sunia2 小时前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi3 小时前
J7A-高级Java工程师面试三道灵魂拷问-深度广度与工程素养的终极检验
java·后端
狼爷1 天前
吃透 Java Function 接口,搞定 99% 的 Stream 场景
java·函数式编程
祎雪双十Gy1 天前
从 DataX 的配置加载说起:我用 FastJson2 做了一个轻量级动态配置管理库
java·后端
小锋java12341 天前
分享一套锋哥原创的SpringBoot4+Vue3宠物领养网站系统
java
考虑考虑1 天前
Java实现hmacsha1加密算法
java·后端·java ee
掉鱼的猫1 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot