2017校招-今日头条:头条校招

题目描述

头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队。每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来。在选题之前,我们对题目进行了盲审,并定出了每道题的难度系数。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a, b, c,我们希望这3道题能满足下列条件:
a<= b<= c
b - a<= 10
c - b<= 10
所有出题人一共出了n道开放性题目。现在我们想把这n道题分布到若干场考试中(1场或多场,每道题都必须使用且只能用一次),然而由于上述条件的限制,可能有一些考试没法凑够3道题,因此出题人就需要多出一些适当难度的题目来让每场考试都达到要求。然而我们出题已经出得很累了,你能计算出我们最少还需要再出几道题吗?

输入描述

输入的第一行包含一个整数n,表示目前已经出好的题目数量。
第二行给出每道题目的难度系数 d1, d2, …, dn。

输出描述

输出只包括一行,即所求的答案。

示例

输入
4
20 35 23 40
输出
2

解题思路

根据题目要求可得到c - a <= 20,所以首先我们需要对题目难度进行排序,然后按照题目之前需要满足的难度关系进行求解即可。

解题代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int ans = 0;
int n = sc.nextInt();
int[] difficult = new int[n];
for (int i = 0; i < n; i++) {
difficult[i] = sc.nextInt();
}
Arrays.sort(difficult);
int num = 1;
for (int i = 0; i < n-1; i++) {
int diff= difficult[i+1] - difficult[i];
if (diff <= 10) {
num++;
if (num == 3) {
i++;
num =1;
}
} else if (diff <= 20 && diff > 10) {
if (num == 1) {
ans++;
i++;
} else if (num == 2) {
ans++;
}
num = 1;
} else if (diff > 20) {
if (num == 1) {
ans += 2;
} else if (num == 2) {
ans++;
}
num = 1;
}
}
ans += (ans+n) % 3 == 0 ? 0 : 3 - (ans+n) % 3;
System.out.println(ans);
}
}
您的支持将鼓励我继续创作!