当前位置: 代码迷 >> 综合 >> Codeforces 898D
  详细解决方案

Codeforces 898D

热度:44   发布时间:2024-03-06 02:59:01.0

题目链接

题目大意:

 

 

n个闹钟   每个闹钟在第 ai 分钟响起并持续一分钟。

如果在连续的m分钟内有至少k个闹钟响起,那么你就必须起床。

现在为了不用起床,要求关闭最少的闹钟的数量。

 

解题思路:

贪心

代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2e5+10;
int a[maxn];
int b[maxn];
int main()
{int n,m,k,i,j;int ans=0;cin>>n>>m>>k;for(i=1;i<=n;i++)cin>>a[i];sort(a+1,a+n+1);for(i=1,j=1;i<=n;i++){b[j]=a[i];//开着闹钟 if(i<k||b[j]-b[j-k+1]>=m)j++;//可以继续开着 j要是不动说明这个关上了 elseans++;//统计上面 j不动关掉的那个 }cout<<ans<<endl;return 0; 
}

 

  相关解决方案