2021 百度之星初赛第二场 1002.随机题意(贪心)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021 百度之星初赛第二场 1002.随机题意(贪心)相关的知识,希望对你有一定的参考价值。
对于 a i a_i ai,满足条件的 b i b_i bi落在区间 [ a i − k , a i + k ] [a_i-k,a_i+k] [ai−k,ai+k]中
考虑对这些区间按左端点排序,问题转化为让最多的区间分配到点(一个点只能属于一个区间)
考虑左端点最小的区间范围是 [ l i , r i ] [l_i,r_i] [li,ri],那么就让 l i l_i li点属于这个区间
Ⅰ.因为一个点只能属于一个区间,所以这样的做法一定不会更差,反正这个点给后续区间贡献也是1
Ⅱ.选定最左边的点可以使,这个被选定点影响后续区间的可能更小,所以更优秀
总之就是选点的时候尽量往左边选就好啦
#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int maxn = 1e6+10;
int a[maxn],n,k;
int main()
{
int t; cin >> t;
while( t-- )
{
cin >> n >> k;
for(int i=1;i<=n;i++) scanf("%d",&a[i] );
sort( a+1,a+1+n );
int ans = 0, mx = -1e9;
for(int i=1;i<=n;i++)
{
if( mx+1<=a[i]+k )
mx = max( mx+1,a[i]-k ),ans++;
}
cout << ans << endl;
}
}
以上是关于2021 百度之星初赛第二场 1002.随机题意(贪心)的主要内容,如果未能解决你的问题,请参考以下文章