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


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

一起进步!!!


闪现
天梯赛

相关推荐
skywalk81632 小时前
我想基于kotti-py312 ,制作一个多中文编程语言的宣传网站,主要包括文档、playground 示例和学习 (Codearts制作)
开发语言·学习·编程
Sunia2 小时前
《AgentX 专栏》08-工作流引擎:AgentWorkflow怎么把工具记忆流程串成一条流水线
java·架构
聆风吟º2 小时前
【C++11新章】列表初始化详解
开发语言·c++·列表初始化
huipeng9262 小时前
企业级微服务开发实战(二):微服务基础设施搭建与中间件部署
java·redis·mysql·spring cloud·微服务·nacos·rabbitmq
Jabes.yang2 小时前
Java电商订单系统面试全流程解析:接口设计、数据库、微服务与分布式事务实战
java·微服务·mybatis·分布式事务·电商·订单系统·接口设计
码语智行2 小时前
导入模板下载
java
闪电悠米2 小时前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua
Shadow(⊙o⊙)2 小时前
进程间通信0.0-pipe()匿名管道,详细分析进程池调度队列执行逻辑,进程池模拟实现。
linux·运维·服务器·开发语言·c++
摇滚侠2 小时前
IDEA 创建 Java 项目 推送到远程 Git 仓库
java·git·intellij-idea
指尖的爷2 小时前
C++头文件的作用
开发语言·c++