传送门

题意:

  Monocarp得到一份工作,每天要工作 m 分钟,他有一个爱好,喜欢在休息的时候喝咖啡,但是他的老板不乐意了,就给他规定了个

  时间 d,在 d 分钟内只能喝一杯咖啡。

  现给出Monocarp喝 n 杯咖啡的时间点,问最少需要几天喝完?

  并输出每个时间点的咖啡在第几天喝。

  样例1解释:

  4 5 3

  3 5 1 2

  Monocarp有 n 杯咖啡需要喝,但老板规定,在 3 分钟内只能喝一杯,

  那么在第一天Monocarp可以喝时间点为 1,5 的咖啡;

  第二天可以喝时间点为 2 的咖啡;

  第三天可以喝时间点为 3 的咖啡;

  那么,最少需要三天才能喝完这 n 杯咖啡 ;

  第一杯咖啡 3 在第三天喝,输出 3;

  第二杯咖啡 5 在第一天喝,输出 1;

  第三杯咖啡 1 在第一天喝,输出 1;

  第四杯咖啡 2 在第二天喝,输出 2;

题解:

  根据贪心的思想,对于每一天,尽可能的多喝,这样才会使中天数最少;

  首先将咖啡按时间点从小到大排个序,然后找出第一天最多喝的咖啡,第二天最多和的咖啡,以此类推,

  直到所有咖啡全部喝完。

  那么该怎么找第一天最多和的咖啡呢?

  这里我使用了一个 map 中的 lower_bound() 函数,首先将喝咖啡的 n 个时间点存在 map 的first中。根据 map 的特性,

  他会自动按照 first值 由小到大排序。

  由贪心思想可得,时间点最小(假设为 x)的咖啡要在第一天喝,然后,在 map 中二分查找时间点 ≥ x+d+1 的最小的时刻(假设为 y),

  那么 y 时刻的咖啡也要在第一天喝,接着查找时间点 ≥ y+d+1 的最小时刻,以此类推,直到搜索完所有满足条件的时间点,那么第一天的

  喝咖啡的时间点就搜索完毕了,并且,在确定某一时间点在第一天喝后,要将其从 map 数组中删去,防止后面的重复计数。

  第二天、第三天的搜索情况同理。

AC代码:

 #include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=2e5+; int n,m,d;
int a[maxn];
map<int ,int >ans;//if ans[x]=y : 时间点为x的咖啡在第y天喝
map<int ,int >b;//first存储咖啡时间点,second随意 void Solve()
{
for(int i=;i <= n;++i)
b[a[i]]=i; int day=;
int tot=;
map<int ,int >::iterator it; for(it=b.begin();it != b.end();++it)
{
//当前有tot个时间点已求出解
if(tot >= n)
break; int x=it->first;
if(!ans.count(x))//如果在之前的day中没有筛去x时间点,那么x时间点在第day+1天喝
{
ans[x]=++day;
tot++;
}
//查找出第day天可以喝的咖啡时间点
map<int ,int >::iterator t=b.lower_bound(x+d+);
while(t->first >= x+d+)
{
ans[t->first]=ans[x];
x=t->first;
b.erase(t); t=b.lower_bound(x+d+);
tot++;
}
} printf("%d\n",day);
for(int i=;i <= n;++i)
printf("%d ",ans[a[i]]);
}
int main()
{
scanf("%d%d%d",&n,&m,&d);
for(int i=;i <= n;++i)
scanf("%d",a+i);
Solve(); return ;
}

Gym - 101911A "Coffee Break"的更多相关文章

  1. CF1041C Coffee Break

    CF1041C Coffee Break 题目大意: 给定nn个数和一个kk,这nn个数都不超过mm 每次从没被去掉的数里面选一个数aa,去掉aa,然后可以任意一个b(b>a+k)b(b> ...

  2. Coffee Break

    题目链接:Coffee Break  Gym-101911A 题目大意:有一位员工想要利用喝咖啡来休息,他给了一个数组表示他想要喝咖啡的时间点(假设他喝咖啡用时1分钟),老板规定每次喝咖啡的时间间隔必 ...

  3. C. Coffee Break 贪心 思维 有点难 有意思

    C. Coffee Break 这个贪心之前好像写过,还是感觉挺难的,有点不会写. 这个题目大意是:给你一个数列n个元素,然后给你一天的时间,给你一个间隔时间d, 问你最少要用多少天可以把这个数列的所 ...

  4. A. Coffee Break(思维题,类似于邻接表的head数组用法)

    题:https://codeforces.com/gym/101911/problem/A 题意:每天工作m分钟,每次喝coffee得间隔d分钟,然后给出n个数,每个数表示想在一天中的a[i]的时刻喝 ...

  5. 【CodeForces-1041C】Coffee Break(二分解决关于set,pair,upper_bound用法)

    //题意:一个的工作时间是m分钟. // 在特定的时间和咖啡 n a1,a2....an,, ai代表的是每个咖啡要在一天中对应的时间点喝掉 // 每一次喝咖啡的时间为1分钟 // 必须在一天中的ai ...

  6. 2018.09.16 codeforces1041C. Coffee Break(双端队列)

    传送门 真心sb题啊. 考场上最开始看成了一道写过的原题... 仔细想了一会发现看错了. 其实就是一个sb队列. 每次插入到队首去就行了. 代码: #include<bits/stdc++.h& ...

  7. gym 101911

    A. Coffee Break 题意:每天有m小时,你喝咖啡需要花一小时,你想在n个时刻都喝过一次咖啡,老板规定连续喝咖啡的间隔必须是d以上,求最少需要多少天才能喝够n次咖啡,并输出每个时刻第几天喝. ...

  8. UVa11555 - Aspen Avenue

    今晚CF GYM A题,神坑.. 原题: Aspen Avenue ``Phew, that was the last one!'' exclaimed the garden helper Tim a ...

  9. (10)The secret to great opportunities? The person you haven't met yet

    https://www.ted.com/talks/tanya_menon_the_secret_to_great_opportunities_the_person_you_haven_t_met_y ...

随机推荐

  1. scrapy的一些容易忽视的点(模拟登陆,传递item等)

    scrapy爬虫注意事项 一.item数据只有最后一条 这种情况一般存在于对标签进行遍历时,将item对象放置在了for循环的外部.解决方式:将item放置在for循环里面.   二.item字段传递 ...

  2. Java多线程2:线程的使用及其生命周期

    一.线程的使用方式 1.继承Thread类,重写父类的run()方法 优点:实现简单,只需实例化继承类的实例,即可使用线程 缺点:扩展性不足,Java是单继承的语言,如果一个类已经继承了其他类,就无法 ...

  3. dede:field name=’position’标签调用 主页改成英文Home和改变符号

    在用dede:field name=’position’ 这个标签的时候我们调用的这个就是中文的,出现的是主页>+相应的栏目  ,那么这个问题怎么改成英文的呢?有好多大虾都说找到dede安装目录 ...

  4. mybatis-spring-1.2.2.jar下载地址

    http://www.java2s.com/Code/Jar/m/Downloadmybatisspring120jar.htm

  5. How to create ISO on macOS

    hdiutil makehybrid -iso -joliet -o test1.iso /users/test/test1

  6. JarvisOJ Basic easyRSA

    还记得veryeasy RSA吗?是不是不难?那继续来看看这题吧,这题也不难. 已知一段RSA加密的信息为:0xdc2eeeb2782c且已知加密所用的公钥: (N=322831561921859 e ...

  7. LAMP架构部署和动态网站环境的配置

    实验环境: 操作系统:centos 7.5 服务器IP:192.168.10.5 运行用户:root 连接工具:xshell工具 web环境:Linux+apache+php+mariadb(LAMP ...

  8. HTML知识点总结[部分]

    Web服务的本质(socket实例) import socket def handle_request(client): buf = client.recv(1024) client.send(byt ...

  9. python BeautifulSoup库的基本使用

    Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以 ...

  10. Quartus prime 16.0 signaltap II 使用

    前言 由于逻辑分析仪太贵,altera贴心提供signal tap II来观察输出波形,不过使能signaltap II会占用片内ram,毕竟原理就是把数据采样到ram中再通过jtag口上传到quar ...