今天开始学Java 现在现在有一台机器,这台机器可以接收两种形式任务:

题目描述
									

现在现在有一台机器,这台机器可以接收两种形式任务:(1)任务列表,任务列表里面有N个任务,对于第i个任务,机器在Ti时间开始执行,并在1个单位时间内做完。(2)临时任务,机器可以在任意时间接收一个临时任务,但任务列表里面的任务优先级要高于临时任务,也就是说当机器空闲的时候才会执行临时任务。

现在机器已经接收一个任务列表。接下来会有M个临时任务,我们想知道每个临时任务何时被执行。为了简化问题我们可以认为这M个临时任务是独立无关即任务是可以同时执行的,互不影响的。


输入

输入数据有多组,每组数据第一行包括两个整数N和M(1<=N, M<=10^5)。

接下来一行有N个不同数字T1,T2,T3.....TN(1<=T1<t2<t3<....<tn<=10^9),表示机器在ti时间执行第i个任务。< p="" style="margin: 0px; padding: 0px;">

接下来又M行,每行一个数字Qi(1<=Qi<=10^9),表示第i个临时任务的的接收时间。


样例输入

5 6

1 2 3 5 6

3

2

1

4

5

6


输出

对于每个临时任务,输出它被执行的时间。


样例输出

4

4

4

4

7

7


时间限制

这道题目文字描述有很多,其实仔细想想其中的道理其实还是比较简单的。第一次输入和第二次输入的分别是主任务个数和临时任务个数,第三次输入的是主任务的处理时间节点,第四次及以后的输入都是临时任务的时间节点。我的思路是这样的:就是在第三次输入的那一些数字找一个不连续节点,这个不连续的结点就是空余时间,找到这个空余时间,然后从第四次及以后的输入中找出比这个空余结点时间小的数据,思路是这样的,但是实现起来并不简单。 然后我看了大佬的代码,发现可以用几行代码就可以实现了。。。。简直6666

import java.util.Scanner;
public class Main{
  public static void main(String[] args){
  Scanner sc = new Scanner(System.in);
    while(sc.hasNext()){
    int n = sc.nextInt();
    int m =sc.nextInt();
    int[] Q= new int[n];
    int[] T = new int[m];
    for (int i =0;i<n;i++){
      Q[i] = sc.nextInt();     
    }
      for (int i = 0;i<m;i++){
      T[i] = sc.nextInt();
        for(int j = 0;j<n;j++){
        if(T[i] == Q[j]){
        T[i]++;
        }
        }
        System.out.println(T[i]);
      }
    }
  }
}

猜你喜欢

转载自blog.csdn.net/u014566193/article/details/79633652