You are a coach at your local university. There are ?? students under your supervision, the programming skill of the ??-th student is ????.
You have to create a team for a new programming competition. As you know, the more students some team has the more probable its victory is! So you have to create a team with the maximum number of students. But you also know that a team should be balanced. It means that the programming skill of each pair of students in a created team should differ by no more than 5.
Your task is to report the maximum possible number of students in a balanced team.
The first line of the input contains one integer ?? (1≤??≤2⋅105) — the number of students.
The second line of the input contains ?? integers ??1,??2,…,???? (1≤????≤109), where ???? is a programming skill of the ??-th student.
Print one integer — the maximum possible number of students in a balanced team.
6 1 10 17 12 15 2
3
10 1337 1337 1337 1337 1337 1337 1337 1337 1337 1337
10
6 1 1000 10000 10 100 1000000000
1
In the first example you can create a team with skills [12,17,15].
In the second example you can take all students in a team because their programming skills are equal.
In the third example you can create a team consisting of a single student (and you cannot create a team consisting of at least two students).
官方:Let‘s sort all values in non-decreasing order. Then we can use two pointers to calculate for each student
?? the maximum number of students ?? such that ????−????≤5 (??>??). This is pretty standard approach. We also can use binary search to do it (or we can store for each programming skill the number of students with this skill and just iterate from some skill ?? to ??+5 and sum up all numbers of students).
我比赛时用map离散化了一下,又套上桶排,然后才跑双指针……大概是前两题都用到桶,思维被死死限制住了……
1 #include<stdio.h> 2 #include<algorithm> 3 4 int n,k; 5 6 int a[200010]; 7 8 int main() 9 { 10 //freopen("test.in","r",stdin); 11 scanf("%d",&n); 12 for(int i=0;i<n;i++) 13 scanf("%d",a+i); 14 std::sort(a,a+n); 15 int ans=0; 16 int j=0; 17 for(int i=0;i<n;i++) 18 { 19 while(j<n&&a[j]-a[i]<=5) 20 { 21 j++; 22 ans=std::max(j-i,ans); 23 } 24 } 25 printf("%d\n",ans); 26 return 0; 27 }
You are a coach at your local university. There are ?? students under your supervision, the programming skill of the ??-th student is ????.
You have to create a team for a new programming competition. As you know, the more students some team has the more probable its victory is! So you have to create a team with the maximum number of students. But you also know that a team should be balanced. It means that the programming skill of each pair of students in a created team should differ by no more than 5.
Your task is to report the maximum possible number of students in a balanced team.
The first line of the input contains one integer ?? (1≤??≤2⋅105) — the number of students.
The second line of the input contains ?? integers ??1,??2,…,???? (1≤????≤109), where ???? is a programming skill of the ??-th student.
Print one integer — the maximum possible number of students in a balanced team.
6 1 10 17 12 15 2
3
10 1337 1337 1337 1337 1337 1337 1337 1337 1337 1337
10
6 1 1000 10000 10 100 1000000000
1
In the first example you can create a team with skills [12,17,15].
In the second example you can take all students in a team because their programming skills are equal.
In the third example you can create a team consisting of a single student (and you cannot create a team consisting of at least two students).
Codeforces Round #544 (Div. 3) Editorial C. Balanced Team
原文:https://www.cnblogs.com/wawcac-blog/p/10499708.html