Codeforces 898D - Alarm Clock
2024-09-04 21:02:46
传送门:http://codeforces.com/contest/898/problem/D
有n个闹钟,第i(1≤i≤n)个闹钟将在第ai(1≤ai≤106)分钟鸣响,鸣响时间为一分钟。当在连续的m分钟内,有至少k个闹钟鸣响,则会被叫醒。现要求关闭一些闹钟,使得在任意连续的m分钟内,鸣响的闹钟数量恒小于k。
可以贪心地求解这个问题。
首先,设置一个bool数组ison[],当有闹钟在第i分钟鸣响时,记ison[i]=1,否则ison[i]=0。
接下来,扫描整个时间区间[0..MAX_A]。记当前时间为i,记在区间(i-m..i]={i-m+1,...,i-1,i}上开启的闹钟个数为cnt。扫描时维护cnt,当cnt≥k时,将当前的闹钟关闭即可。
参考程序如下:
#include <stdio.h>
#include <stdbool.h>
#define MAX_A 1000001 bool ison[MAX_A]; int main(void)
{
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
for (int i = ; i < n; i++) {
int a;
scanf("%d", &a);
ison[a] = true;
}
int ans = , cnt = ;
for (int i = ; i < MAX_A; i++) {
if (ison[i]) cnt++;
if (i - m > && ison[i - m]) cnt--;
if (cnt >= k) {
ison[i] = false;
cnt--;
ans++;
}
}
printf("%d\n", ans);
return ;
}
最新文章
- 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
- Docker安装CentOS
- 简单实用的Log4net帮助类
- iOS Swift编程语言
- display:inline 和display:inline-block和display:block的区别
- sql语句执行插入后返回ID
- 让HTML5语义化标签兼容IE浏览器
- scala言语基础学习四
- red bottom shoes featured
- [BZOJ 3110] [Zjoi2013] K大数查询 【树套树】
- mud目录命令说明
- [Android学习笔记]Unable to execute dex Multiple dex files define:xxxx 问题
- OCP-1Z0-051-题目解析-第12题
- final 、finally 和 finalize()的区别
- libaio.so.1()(64bit) is needed by MySQL-server 问题解决办法
- DeleteFile 删除文件
- C# Winfrom 进程&;多线程
- Leetcode 50.Pow(x,n) By Python
- Puppet软件资源管理
- ==和equal()的区别
热门文章
- 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法
- 蒟蒻的trie树专题
- 设置用root用户telnet到linux系统
- 请问在C#的Winform下如何用正则表达式限制用户只能在textBox中输入18位的身份证号码。
- Python中的math和保留小数位数方法
- gulp安装成功但是无法使用
- PCB 周期计算采用 SQL 函数调用.net Dll 标量函数 实现
- bzoj1143(2718)[CTSC2008]祭祀river(最长反链)
- 原生JS---3
- POJ 1149 PIGS (AC这道题很不容易啊)网络流