P10389 [蓝桥杯 2024 省 A] 成绩统计题目描述小蓝的班上有nnn个人一次考试之后小蓝想统计同学们的成绩第iii名同学的成绩为aia_iai​。当小蓝统计完前xxx名同学的成绩后他可以从1∼x1 \sim x1∼x中选出任意kkk名同学的成绩计算出这kkk个成绩的方差。小蓝至少要检查多少个人的成绩才有可能选出kkk名同学他们的方差小于一个给定的值TTT提示kkk个数v1,v2,⋯ ,vkv_1, v_2, \cdots , v_kv1​,v2​,⋯,vk​的方差σ2\sigma^2σ2定义为σ2∑i1k(vi−vˉ)2k\sigma^2\dfrac {\sum_{i1}^k(v_i-\bar v)^2} kσ2k∑i1k​(vi​−vˉ)2​其中vˉ\bar vvˉ表示viv_ivi​的平均值vˉ∑i1kvik\bar v \dfrac {\sum_{i1}^k v_i} kvˉk∑i1k​vi​​。输入格式输入的第一行包含三个正整数 $n, k, T $相邻整数之间使用一个空格分隔。第二行包含nnn个正整数a1,a2,⋯ ,ana_1, a2, \cdots, a_na1​,a2,⋯,an​相邻整数之间使用一个空格分隔。输出格式输出一行包含一个整数表示答案。如果不能满足条件输出−1-1−1。输入输出样例 #1输入 #15 3 1 3 2 5 2 3输出 #14说明/提示检查完前三名同学的成绩后只能选出 $3, 2, 5 $方差为 $1.56 $检查完前四名同学的成绩后可以选出 $3, 2, 2 $方差为 $0.22 1 $所以答案为 $4 $。对于10%10\%10%的评测用例保证1≤n,k≤1021 ≤ n, k ≤ 10^21≤n,k≤102对于30%30\%30%的评测用例保证1≤n,k≤1031 ≤ n, k ≤ 10^31≤n,k≤103对于所有评测用例保证 $1 ≤ n, k ≤ 10^5 $$1 ≤ T ≤ 2^{31} -1 $$1 ≤ a_i ≤ n $。C实现#includebits/stdc.h#defineinlinline#defineregregister#defineintlonglong#definerep(i,x,y)for(regintix;i(y);i)usingnamespacestd;constintN1e55;intn,k,t,a[N],sum_s[N],sum[N],v[N];boolcheck(intx){rep(i,1,x)v[i]a[i];sort(v1,vx1);rep(i,1,x){sum_s[i]sum_s[i-1]v[i]*v[i];sum[i]sum[i-1]v[i];}doubleansDBL_MAX;rep(i,k,x){doublesum1sum_s[i]-sum_s[i-k];doublesum22*(1.0*sum[i]-sum[i-k])*((1.0*sum[i]-sum[i-k])/k);doublesum3((1.0*sum[i]-sum[i-k])/k)*((1.0*sum[i]-sum[i-k])/k)*k;ansmin(ans,(sum1-sum2sum3)/k);}returnanst;}signedmain(){cinnkt;rep(i,1,n){cina[i];}intlk,rn,ans-1;while(lr){intmid(lr)1;if(check(mid)){rmid-1;ansmid;}else{lmid1;}}coutans;return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容