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;
}

思路:

开始想直接暴力查找,果然TLE。后来没想到怎么优化。其实想到二分但太复杂,不想写。重点没学会map和查找函数.

最重点:

函数upper_bound(a,a+n,x)-a 查找出最晚出现的X的下标

lower_bound(a,a+n,x)-a 查找出第一个出现的x的下标

都在algorithm里

最新文章

  1. 图片拾取器-PicPicker
  2. C#中使用Linq实现全外连接
  3. 【转】NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
  4. Realm简单使用小记
  5. Codeforces Round #242 (Div. 2) C. Magic Formulas
  6. ajax完整结构
  7. JS 之性能优化(1)
  8. 【转】Javascript+css 实现网页换肤功能
  9. Eclipse中的TreeViewer类和ListViewer类
  10. 针对目前高校移动App的火热,哥决定点一把火
  11. Red and Black
  12. BZOJ 1062 糖果雨
  13. Radio Checkbox Select 操作
  14. 前端知识点-CSS相关知识点
  15. 有关LinkedList常用方法的源码解析
  16. Spring请求参数校验
  17. 可以让你神操作的手机APP推荐 个个都是爆款系列
  18. Vim 下的复制/粘贴/剪切/撤销
  19. nginx 配置本地https(免费证书)
  20. 【开源】 bsf.mvc spingboot的扩展

热门文章

  1. IO复习
  2. P2678 [NOIP2015 提高组] 跳石头
  3. 经纬坐标(BLH)数据创建.kml文件小工具设计 Java版
  4. vue3-hash-calendar,一款基于vue3.x开发的移动端日期时间选择组件
  5. [数分笔记]Dedekind切割定理的证明
  6. [GAME] [Civilization] 文明6字体及字体大小修改
  7. RESTful风格了解
  8. 【C# TAP 异步编程】二 、await运算符已经可等待类型Awaitable
  9. easyui datagrid中 formatter的用法
  10. docker下tomcat连redis