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 43 44 45 46 47 48 49
| import java.util.Arrays; import java.util.Scanner;
public class Main { static int N=100010,n,k,t; static long a[]=new long[N]; public static boolean check(int m){ long arr[]=new long[m+5]; long s[]=new long[m+5]; long s_pow[]=new long[m+5]; for(int i=1;i<=m;i++) arr[i]=a[i]; Arrays.sort(arr,1,m+1); for(int i=1;i<=m;i++){ s[i]=s[i-1]+arr[i]; s_pow[i]=s_pow[i-1]+(arr[i]*arr[i]); } for(int i=k;i<=m;i++){ long s1=s_pow[i]-s_pow[i-k]; long s2=s[i]-s[i-k]; double avg=s2*1.00/k;
double res=(s1-2*avg*s2+k*avg*avg)/k; if(res<t) return true; } return false; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); n=sc.nextInt(); k=sc.nextInt(); t=sc.nextInt(); for(int i=1;i<=n;i++){ a[i]=sc.nextLong(); } int l=k,r=n; int res=-1; while (l<=r){ int mid=(l+r)>>1; if(check(mid)){ r=mid-1; res=mid; }else{ l=mid+1; } } System.out.println(res); } }
|