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


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

一起进步!!!


闪现
天梯赛

相关推荐
EXI-小洲6 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员7 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导7 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan7 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
m0_695251497 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
2601_961901707 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
何以解忧,唯有..8 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
大衛說8 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
QQ_21696290969 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
可乐鸡翅yeah_10 小时前
hls.js 内存泄漏实战排查,直播 M3U8 长时间播放异常定位方案
开发语言·javascript·python·django·ecmascript·m3u8·m3u8在线