2024 ccfcsp认证打卡 2022 12 02 训练计划

2022 12 02 训练计划

在这里插入图片描述
在这里插入图片描述

题解1 70分

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();  // 数组大小
        int m = scanner.nextInt();  // 操作次数

        int[] p = new int[105];  // 数组p,下标从1开始
        int[] q = new int[105];  // 数组q,下标从1开始

        // 读取数组p的值
        for (int i = 1; i <= m; i++) {
            p[i] = scanner.nextInt();
        }

        // 读取数组q的值
        for (int i = 1; i <= m; i++) {
            q[i] = scanner.nextInt();
        }

        // 根据题目描述,对数组q进行修改
        for (int i = 1; i <= m; i++) {
            if (p[i] == 0) {
                System.out.print(1 + " ");  // 如果p[i]为0,则输出1
            } else {
                System.out.print(q[p[i]] + 1 + " ");  // 否则输出q[p[i]] + 1
                q[i] += q[p[i]];  // 修改q[i]的值为原来的值加上q[p[i]]
            }
        }

        scanner.close();
    }
}

题解2

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        M();
    }

    // 定义M函数用于计算最早开始时间和最晚开始时间
    public static int M(){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();  // 天数
        int m = sc.nextInt();  // 科目数
        int[] p = new int[m+1];  // 依赖科目的编号
        int[] t = new int[m+1];  // 训练天数
        int[] ea = new int[m+1];  // 最早开始时间
        int[] la = new int[m+1];  // 最晚开始时间
        int min_latest;  // 最晚开始时间的最小值
        int key = 1;  // 标记是否可以在规定天数内完成所有科目的训练,初始为1,表示可以完成

        // 读取依赖科目的编号
        for (int i = 1; i <= m; i++) {
            p[i] = sc.nextInt();
        }

        // 读取训练天数
        for (int i = 1; i <= m; i++) {
            t[i] = sc.nextInt();
        }

        // 计算每个科目的最早开始时间
        for (int i = 1; i <= m; i++) {
            if (p[i] == 0){
                ea[i] = 1;  // 如果没有依赖,最早可以从第1天开始训练
            }else {
                ea[i] = ea[p[i]] + t[p[i]];  // 最早开始时间为依赖科目的结束时间加上依赖科目的训练天数
            }
            if ((ea[i] + t[i] - 1) > n){  // 如果最早开始时间加上本科目的训练天数大于总天数n
                key = 0;  // 则无法在规定天数内完成所有科目的训练,key置为0
            }
        }

        // 计算每个科目的最晚开始时间
        if(key == 1){  // 如果可以在规定天数内完成所有科目的训练
            for (int i = m; i >=1 ; i--) {
                min_latest = n - t[i] + 1;  // 最晚开始时间的初始值为总天数n减去本科目的训练天数再加1
                for (int j = m; j > i; j--) {
                    if (p[j] == i) {  // 如果j依赖i
                        min_latest = Math.min(min_latest, la[j] - t[i]);  // 则最晚开始时间为依赖i的最晚开始时间减去i的训练天数
                    }
                }
                la[i] = min_latest;
            }
        }

        // 输出最早开始时间
        for (int i = 1; i <= m; i++) {
            System.out.print(ea[i] + " ");
        }
        System.out.println();

        // 如果可以在规定天数内完成所有科目的训练,则输出最晚开始时间
        if(key == 1){
            for (int i = 1; i <= m; i++) {
                System.out.print(la[i]+ " ");
            }
        }

        return 0;
    }

}

相关推荐

  1. 2024作息和事件梳理

    2024-04-01 17:50:04       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 17:50:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 17:50:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 17:50:04       82 阅读
  4. Python语言-面向对象

    2024-04-01 17:50:04       91 阅读

热门阅读

  1. redis分布式锁-----基于redisson实现分布式锁

    2024-04-01 17:50:04       40 阅读
  2. Vue的生命周期总结

    2024-04-01 17:50:04       39 阅读
  3. 单例设计模式(1)

    2024-04-01 17:50:04       40 阅读
  4. 第十四届省赛大学B组(C/C++)接龙数列

    2024-04-01 17:50:04       40 阅读
  5. bash工具-dir_util.sh

    2024-04-01 17:50:04       45 阅读
  6. python 三层架构思想写代码。

    2024-04-01 17:50:04       45 阅读
  7. python 移位运算符

    2024-04-01 17:50:04       45 阅读
  8. TTL值(Time-To-Live)简介

    2024-04-01 17:50:04       38 阅读
  9. NoSQL(非关系型数据库)之Redis

    2024-04-01 17:50:04       68 阅读
  10. 编程练习(python)

    2024-04-01 17:50:04       30 阅读
  11. 大模型之路1:趟一条小路

    2024-04-01 17:50:04       44 阅读
  12. 关于python中常用命令(持续更新中)

    2024-04-01 17:50:04       51 阅读