201709-2 公共钥匙盒 Java

思路:
按上课开始时间排一下序,一个时刻一个时刻判断要不要还钥匙,要不要借钥匙

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();//N把钥匙
        int K = sc.nextInt();//K次操作
        int key[] = new int[N];
        for(int i=0;i<N;i++) {//给钥匙编号
            key[i] = i+1;
        }

        //存储上课信息
        int mes[][] = new int[K][3];

        //找出最晚结束的课
        int max = 0;
        for(int i=0;i<K;i++) {
            mes[i][0] = sc.nextInt();//钥匙编号
            mes[i][1] = sc.nextInt();//上课开始
            mes[i][2] = sc.nextInt() + mes[i][1];//下课结束时刻
            if(mes[i][2] > max) {
                max = mes[i][2];
            }
        }
        //按上课开始时间排序,选择排序
        for(int i=0;i<K;i++) {
            int min = i;
            for(int j=i+1;j<K;j++) {
                if(mes[j][1] < mes[i][1]) {
                    min = j;
                }
            }
            if(min != i) {//把最小的放到排好序的最后
                int temp[] = mes[min];
                mes[min] = mes[i];
                mes[i] = temp;
            }
        }

        //拿钥匙,到最后一节课结束
        for(int i=1;i<=max;i++) {
            //每一时刻应还钥匙的集合
            List<Integer> back = new ArrayList<Integer>();
            for(int j=0;j<K;j++) {
                if(mes[j][2] == i) {
                    back.add(mes[j][0]);
                }
            }
            Collections.sort(back);//钥匙从小到大排序
            //先全部还完钥匙
            for(int j=0;j<back.size();j++) {
                for(int k=0;k<N;k++) {
                    if(key[k] == 0) {
                        key[k] = back.get(j);
                        break;
                    }
                }
            }

            //借钥匙
            for(int j=0;j<K;j++) {
                if(mes[j][1] == i) {
                    for(int k=0;k<N;k++) {
                        if(key[k] == mes[j][0]) {
                            key[k] = 0;
                        }
                    }
                }
            }
        }

        sc.close();
        //打印
        for(int i=0;i<N;i++) {
            System.out.print(key[i] + " ");
        }
    }
}

原文地址:https://www.cnblogs.com/yu-jiawei/p/12370694.html

时间: 2024-08-30 18:18:45

201709-2 公共钥匙盒 Java的相关文章

CCF 2017 09-02 公共钥匙盒

 CCF 2017 09-02 公共钥匙盒 1.用快速排序函数结合排序规则函数来给取放排序. 2.vector数组的强大功能. 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 struct node{ 6 int num;//钥匙的编号 7 int start;//动作开始时间 8 int action;//动作的类型 0:放 1:取 9 nod

【CCF】公共钥匙盒

问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中. 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙.一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙. 每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会移动其他钥匙.每次还钥匙的时候,还钥匙的老师会找到最左边的空的挂钩,将钥匙挂在这个挂钩上.如果有多位

CCF - 201709-2 - 公共钥匙盒

问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中. 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙.一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙. 每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会移动其他钥匙.每次还钥匙的时候,还钥匙的老师会找到最左边的空的挂钩,将钥匙挂在这个挂钩上.如果有多位

公共钥匙盒 代码复杂,但是容易理解。先留着,以后再优化

#include <iostream> #include<stdio.h> #include<queue> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; struct key { int id; int first; int second; }; int n,k; bool vis[1100]; int pa[1100],p

ccf——201709-2公共钥匙盒

题目: 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中. 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙.一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙. 每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会移动其他钥匙.每次还钥匙的时候,还钥匙的老师会找到最左边的空的挂钩,将钥匙挂在这个挂钩上.如

CCF 2017-09-2 公共钥匙盒

CCF 2017-09-2 公共钥匙盒 题目 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中. 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙.一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙. 每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会移动其他钥匙.每次还钥匙的时候,还钥匙的老师会找到最左

公共钥匙盒 ccf

试题编号: 201709-2 试题名称: 公共钥匙盒 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中. 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙.一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙. 每次取钥匙的时候,老师们都会找到自己所需要的钥匙

微信公共平台java开发之旅——1.centos布置开发环境

第一次写博客,一直以来都觉得博客是很高大尚的,有点小紧张.以前学过java ee,主要都是ssh框架的增删改查,学生党,也没接触过大项目,所以目前经验近乎为零,至于微信公众平台的开发以前学php的时候有接触过,一两年过去了,由于没有做笔记的习惯,差不多都忘光了.现在开始做这个也是一个学习的过程,希望把这个过程分享出来,和大家交流一下,更快进步,同时也想记录这个过程.今天分享的是准备工作,我使用的是腾讯云,系统版本为centos6.5 本次所需预备知识: 熟悉linux系统命令,java开发环境搭

求两个字符串的最长公共子串——Java实现

要求:求两个字符串的最长公共子串,如"abcdefg"和"adefgwgeweg"的最长公共子串为"defg"(子串必须是连续的) public class Main03{ // 求解两个字符号的最长公共子串 public static String maxSubstring(String strOne, String strTwo){ // 参数检查 if(strOne==null || strTwo == null){ return null