Codeforces 1156C 尺取法 / 二分
2024-08-25 07:04:25
题意:给你一个数组,问里面最多能匹配出多少对,满足abs(a[i] - a[j]) >= k;
思路:首先肯定要排序。
思路1(尺取法):看了dreamoon的代码明白的。我们可以寻找一个最长的段,这段的最大值和最小值的差小于k,假设数组长度是n,那么答案是min(n / 2, n - mx)。为什么呢?如果mx大于n / 2,容易发现我们最多只能构造出n - mx对,mx小于同理。
代码:
#include <bits/stdc++.h>
#define LL long long
#define db double
#define INF 0x3f3f3f3f
#define pii pair<int, int>
using namespace std;
const int maxn = 200010;
int a[maxn], re[maxn], tot;
bool v[maxn];
int main() {
int n, m, ans = 0;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
sort(a + 1, a + 1 + n);
int l = 1, r = 1;
int mx = 0;
for(; r <= n; r++) {
while(a[l] + m <= a[r]) l++;
mx = max(mx, r - l + 1);
}
printf("%d\n", min(n / 2, n - mx));
}
思路2:二分。
二分取前几个元素,判断只和后几个元素能不能匹配即可。
最新文章
- AFNetworking 与 gbk 编码格式后台数据的使用
- MongoDB导入(mongoimport)-导出(mongoexport)工具使用
- Github 安全类Repo收集整理
- struts2 学习路线
- hdu 4521 小明系列问题——小明序列(线段树 or DP)
- Visual Studio 2010 单元测试
- Jlink更新新固件USB连接不上的问题
- sql server 修改字段大小
- 爬虫总结_python
- LFLiveKit架构简介
- hdu--4148--Length of S(n)
- js BOM DOM
- Loadrunner初学
- 解决ssh连接linux服务器速度慢
- 检测浏览器是否支持ES6
- wx-charts 微信小程序图表 -- radarChart C# .net .ashx 测试
- centos安装系统全过程
- Leetcode 217.存在重复元素 By Python
- 实验五 Java网络编程及安全 实验报告 20135232王玥
- zend studio 连PHP自带系统函数 常量都不提示
热门文章
- Ubuntu14.04搭建Boa服务
- Failed to resolve com.android.support:support-compat:25.4.0
- C# WinForm 提示框延迟自动关闭
- Struts2中Action类的三种写法
- Windows下Maven安装 + eclipse集成
- 使用nano编辑器进行查找和替换
- nucleus plus学习总结(后续)
- 查看电脑是否安装jdk以及安装了的路径
- CentOS 安装MySQL rpm方式安装
- (10)C++ 使用类