CodeForces 1156C Match Points

传送门:https://codeforces.com/problemset/problem/1156/C

You are given a set of points x1,x2,...,xnx_1, x_2, ..., x_nx1​,x2​,...,xn​ on the number line.
Two points iii and jjj can be matched with each other if the following conditions hold:
neither i nor j is matched with any other point;
∣xi−xj∣≥z|x_i−x_j|≥z∣xi​−xj​∣≥z.What is the maximum number of pairs of points you can match with each other?

Input
The first line contains two integers nnn and z(2≤n≤2⋅105,1≤z≤109)z (2≤n≤2⋅10^5, 1≤z≤10^9)z(2≤n≤2⋅105,1≤z≤109) — the number of points and the constraint on the distance between matched points, respectively.
The second line contains nnn integers x1,x2,...,xn(1≤xi≤109)x_1, x_2, ..., x_n (1≤x_i≤10^9)x1​,x2​,...,xn​(1≤xi​≤109).

Output
Print one integer — the maximum number of pairs of points you can match with each other.

题意:
给出一个数组aaa和一个数zzz,问在aaa中最多可以选择出多少对iii,jjj,满足∣xi−xj∣≥z|x_i−x_j|≥z∣xi​−xj​∣≥z,iii和jjj不能重复选择。

思路:
假设xxx是猜测的最多的对数,sss是真实的最多的对数,那么对于所有可行的xxx,都有x<=sx<=sx<=s
且f(x)=(x<=s?1:0)f(x)=(x<=s?1:0)f(x)=(x<=s?1:0)具有单调性,所以可以二分找答案。
先将数组aaa排序,然后二分答案搜索最大的xxx,xxx表示最多可以选择出多少对i,ji,ji,j。在check函数中,我们可以在排好序的aaa里挑选出最小的xxx个数,也就是前xxx个,为它们匹配最大的xxx个数字一一配对,可以证明这是最优的情况,也就是能够匹配出最多对的情况。然后我们一一检查,如果出现了a[j]−a[i]<za[j]-a[i]<za[j]−a[i]<z,那么这个a[i]a[i]a[i]就需要更大的a[j]a[j]a[j],但如果给这个a[i]a[i]a[i]匹配更大的a[j]a[j]a[j],当前的a[j]a[j]a[j]就会被浪费了,从而凑不出完整的xxx对,所以此时return 0 , 这个xxx不成立。

代码:

#include<iostream>
#include<algorithm>
using namespace std ;
#define ll long long
const ll N = 2e5+9 ;
void updata( ll &a , ll b ){if(b>a)a=b;}
ll n , z ;
ll a[ N ] ;
bool check( ll x ){if( x > n/2 ) return 0 ;for( int i = 1 ; i <= x ; i ++ ){ll p1 = i , p2 = n-x+i ;//第i个和倒数第i个作比较if( a[ p2 ] - a[ p1 ] < z ) return 0 ;}return 1 ;
}
int main(){cin >> n >> z ;for( int i = 1 ; i <= n ; i ++ ) cin >> a[ i ] ;sort( a+1 , a+1+n ) ;ll l , r , mid , ans = -1 , f ;l = 0 , r = n+9 ;while( l <= r ){mid = l+r >> 1 ;f = check( mid ) ;//cout << "mid=" << mid << " f=" << f << "\n" ;if( f ){ l = mid + 1 ; updata( ans , mid ) ; }else r = mid - 1 ;}cout << ans << "\n" ;
return 0 ;
}

Match Points CodeForces 1156C 二分答案相关推荐

  1. 2018.12.08 codeforces 939E. Maximize!(二分答案)

    传送门 二分答案好题. 题意简述:要求支持动态在一个数列队尾加入一个新的数(保证数列单增),查询所有子数列的 最大值减平均值 的最大值. 然而网上一堆高人是用三分做的. 我们先考虑当前的答案有可能由什 ...

  2. Magic Powder - 2 CodeForces - 670D2(二分答案)

    先贴一篇关于二分边界问题的博客,看来自己还是对二分边界的理解不够深入 题目:今天我们要来造房子.造这个房子需要n种原料,每造一个房子需要第i种原料ai个.现在你有第i种原料bi个.此外,你还有一种特殊 ...

  3. CodeForces - 51C 修信号站_思维+二分答案

    题目 给你x轴上的n个点,可以用三段相同长度的区间进行覆盖,问你这三个区间的最小长度是多少,并输出三段区间的中点. 求解 前半个问题应该不难,直接二分答案即可,后半个问题则有些思维成分.另外,这题让我 ...

  4. 【CodeForces 1100E】二分答案 | 拓扑排序 | E

    这是一道很美妙的题- 1100E. Andrew and Taxi time limit per test: 2 seconds memory limit per test: 256 megabyte ...

  5. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 小 ...

  6. BZOJ 2547: [Ctsc2002]玩具兵(二分答案+二分图匹配)

    传送门 解题思路 可以发现天兵不用管,答案的一个上界是\(2*k\),就是天兵一个个换.刚开始写了个拆\(6\)点的网络流,调了半天发现自己假了..说说正解,首先可以发现交换士兵其实就是种类的交换,那 ...

  7. Codeforces 650B 二分

    题目:http://codeforces.com/problemset/problem/650/B 题意: :给n张图片循环可看,每张图片的朝向为横(w)|竖(v),但是手机是竖直放置的.开始时打开的 ...

  8. UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)

    整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...

  9. UVA1146 / LA3211(ACM-ICPC 2004 Europe - Southwestern) Now or later(2-SAT问题 + 二分答案)

    题目要求为 最大化最小值,很明显就是二分答案. 题目中每个飞机 要么是一种状态(早),要么是另一种状态(晚),考虑 2-SAT. 我们二分答案,二分着陆时间间隔的最小值 x. 枚举每两个飞机 p , ...

最新文章

  1. OpenCV 实战:3 步实现图像降噪
  2. 魔改宜家灯泡当主机,玩转《毁灭战士》无压力!网友:远超我家第一台电脑...
  3. 深度学习核心技术精讲100篇(五)-通过CTR预估对比深度学习模型(deepfm)梯度提升模型(catboost)
  4. SQL Server数据库表锁定原理以及如何解除表的锁定转
  5. js-数组方法的使用和详谈
  6. 走近分形与混沌(part10)--用简单的规律来描述复杂的大自然
  7. Eclipse GlassFish 5.1就在这里!
  8. 苹果再次拒绝协助美国政府解锁纽约毒品案中的iPhone
  9. 阿里工程师教你 3 分钟实现数据源编排和接入
  10. 如何查看当前音频的输出路径
  11. MySQL数据库接口的VC具体实现与应用
  12. 灵活的IP网络测试工具——— X-Launch
  13. 浏览器被7654和2345网页劫持解决办法
  14. GBIT51129-2015工业化建筑评价标准
  15. aggr代码 cellranger_CellRanger初探
  16. css3,环绕圆环 loading,小组件
  17. 前端面试题总结(js、html、小程序、React、ES6、Vue、全栈)
  18. 手写:下划线转为驼峰命名法
  19. webpack打包压缩混淆_前端打包利器:webpack工具
  20. mysql root密码是什么_mysql如何查看root密码是什么

热门文章

  1. 社会心理学第四章 态度与行为
  2. 汽车制动盘的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  3. 大学生计算机PHP实训报告,大学生计算机实训心得体会
  4. CNCERT发布《2018年我国互联网网络安全态势报告》
  5. 【思维导图】对外经济贸易大学公开课:企业财务报表分析
  6. Hadoop3.X环境配置
  7. lammps案例:水分子在石墨烯狭缝中流动的案例代码
  8. 一名理想主义的程序员
  9. C#~字典Dictionray
  10. 如何在众多快递物流中筛选出代收的单号