CF回顾《二分类》
cf Educational Codeforces Round 115 (Rated for Div. 2) C题
类型:二分查找。
中文题目:
C.删除两项内容
Monocarp有一个由n个整数组成的数组a。让我们将k表示为这些元素的数学平均值(注意,k可能不是整数)。
n个元素数组的数学平均值是元素之和除以这些元素的数量(i。 e、 和除以n)。
Monocarp希望从a中删除两个元素,以便剩余元素(n)的数学平均值−2) 元素仍然等于k。
您的任务是计算位置对[i,j](i<j)的数量,这样,如果删除这些位置上的元素,则(n)的数学平均值−2) 剩余元素等于k(即,它等于原始数组a的n个元素的数学平均值)。
简化:给一串数,去掉其中两个数,使去掉后的串的平均值等于原平均值,问有几种方案。
如:
输入:
5
1 4 7 3 5
输出:
2
代码:
#include<bits/stdc++.h>
using namespace std;
#define cout(x) printf("%d",x)
#define cin(x) scanf("%d",&x)
#define ll long long
int a[200010];
int main(){
ll sum,t,n;
cin>>t;
int ans;
while(t--){
memset(a,0,sizeof(a));
ll num=0;
ll sum=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
sum+=a[i];
}
double ans=sum*1.0/n;
ans*=2;
sort(a,a+n);
for(int i=0;i<n;i++){
num+=upper_bound(a,a+n,ans-a[i])-lower_bound(a,a+n,ans-a[i]);
if(ans-a[i]==a[i])num--;
}
cout<<num/2<<endl;
}
return 0;
}
浙公网安备 33010602011771号