Coffee Break
题目大意:有一位员工想要利用喝咖啡来休息,他给了一个数组表示他想要喝咖啡的时间点(假设他喝咖啡用时1分钟),老板规定每次喝咖啡的时间间隔必须要大于d。问:他将给定数组的时间点都经
历一遍最少(贪心所在)需要多长时间,并输出每个时间点是在第几天经历的;
解题思路:贪心地选取喝咖啡的时间,我们尽量选取喝咖啡时间靠前的,然后贪心寻找能放在他后面最靠前的时间点,如果放不开就新开一天。
用map和队列的做法:
/* */
# include <iostream>
# include <stdio.h>
# include <string.h>
# include <string>
# include <iomanip>
# include <algorithm>
# include <ctime>
# include <cmath>
# include <climits>
# include <cstdlib>
# include <utility>
# include <bitset>
# include <cctype>
# include <cassert>
# include <set>
# include <map>
# include <deque>
# include <queue>
# include <stack>
# include <vector>
# include <functional>
using namespace std; typedef long long ll;
const int maxn=2e5+;
const ll mod=1e9+;
const int eps=1e-;
const double pi=acos(-1.0);
# define mem(a,x) memset((a),(x),sizeof((a)))
# define gcd(a,b) (__gcd(a, b))
# define lcm(a,b) (a*b/__gcd(a, b))
# define lson l,m,rt<<
# define rson m+,r,rt<<|
# define lowbit(x)(x&(-x)) int origin[maxn], after[maxn];
map<int, int>m;///存某时间喝咖啡是在哪一天
//priority_queue<int, vector<int>, greater<int> > q;
queue<int>q;
int main()
{
int n, mm, d, cnt=;
cin>>n>>mm>>d; for(int i=; i<=n; i++ )
{
scanf("%d", &origin[i]);
after[i] = origin[i];
} sort(after+, after++n);
m[after[]] = ;//时间点最靠前的在第一天
q.push();
for(int i=; i<=n; i++ )
{
int top=q.front();
if( after[i]-after[top]>d )//可以在同一天
{
m[after[i]]=m[after[top]];
q.pop();
} else
{
cnt++;
m[after[i]] = cnt;
} q.push(i);
}
cout<<cnt<<endl;
for(int i=; i<=n; i++ )
{
if( i== )
printf("%d", m[origin[i]]); else
printf(" %d", m[origin[i]]);
}
cout<<endl;
return ;
}
set的做法:
/* */
# include <iostream>
# include <stdio.h>
# include <string.h>
# include <string>
# include <iomanip>
# include <algorithm>
# include <ctime>
# include <cmath>
# include <climits>
# include <cstdlib>
# include <utility>
# include <bitset>
# include <cctype>
# include <cassert>
# include <set>
# include <map>
# include <deque>
# include <queue>
# include <stack>
# include <vector>
# include <functional>
using namespace std; typedef long long ll;
const int maxn=2e5+;
const ll mod=1e9+;
const int eps=1e-;
const double pi=acos(-1.0);
# define mem(a,x) memset((a),(x),sizeof((a)))
# define gcd(a,b) (__gcd(a, b))
# define lcm(a,b) (a*b/__gcd(a, b))
# define lson l,m,rt<<
# define rson m+,r,rt<<|
# define lowbit(x)(x&(-x)) int a[maxn];
set<int>s;
map<int,int>mp;//喝咖啡的时间点在第几天
int n, m, d;
int main()
{
int i;
cin>>n>>m>>d;
s.clear();//清空set
for( i=; i<=n; i++ )
{
cin>>a[i];
s.insert(a[i]);//插入时间点
} set<int>::iterator iter;//迭代器指针iter
int cnt=;
int ans=; while( s.size() )//当set容器中的元素个数不为0
{
iter = s.lower_bound(cnt);//在set中查找第一个大于等于cnt的数的所在位置,如果不在返回s.end()
if( iter==s.end())
{
ans++;
cnt=;
} else
{
mp[*iter] = ans;
s.erase(*iter);//删除set中值为*iter的数
cnt = *iter+d+;
}
}
cout<<ans<<endl;
for(int i=; i<=n; i++ )
{
if( i== )
printf("%d", mp[a[i]]);
else
printf(" %d", mp[a[i]]);
}
cout<<endl;
return ;
}
Coffee Break的更多相关文章
- CF1041C Coffee Break
CF1041C Coffee Break 题目大意: 给定nn个数和一个kk,这nn个数都不超过mm 每次从没被去掉的数里面选一个数aa,去掉aa,然后可以任意一个b(b>a+k)b(b> ...
- C. Coffee Break 贪心 思维 有点难 有意思
C. Coffee Break 这个贪心之前好像写过,还是感觉挺难的,有点不会写. 这个题目大意是:给你一个数列n个元素,然后给你一天的时间,给你一个间隔时间d, 问你最少要用多少天可以把这个数列的所 ...
- Gym - 101911A "Coffee Break"
传送门 题意: Monocarp得到一份工作,每天要工作 m 分钟,他有一个爱好,喜欢在休息的时候喝咖啡,但是他的老板不乐意了,就给他规定了个 时间 d,在 d 分钟内只能喝一杯咖啡. 现给出Mono ...
- 【CodeForces-1041C】Coffee Break(二分解决关于set,pair,upper_bound用法)
//题意:一个的工作时间是m分钟. // 在特定的时间和咖啡 n a1,a2....an,, ai代表的是每个咖啡要在一天中对应的时间点喝掉 // 每一次喝咖啡的时间为1分钟 // 必须在一天中的ai ...
- A. Coffee Break(思维题,类似于邻接表的head数组用法)
题:https://codeforces.com/gym/101911/problem/A 题意:每天工作m分钟,每次喝coffee得间隔d分钟,然后给出n个数,每个数表示想在一天中的a[i]的时刻喝 ...
- 2018.09.16 codeforces1041C. Coffee Break(双端队列)
传送门 真心sb题啊. 考场上最开始看成了一道写过的原题... 仔细想了一会发现看错了. 其实就是一个sb队列. 每次插入到队首去就行了. 代码: #include<bits/stdc++.h& ...
- 视觉中的深度学习方法CVPR 2012 Tutorial Deep Learning Methods for Vision
Deep Learning Methods for Vision CVPR 2012 Tutorial 9:00am-5:30pm, Sunday June 17th, Ballroom D (Fu ...
- javascript设计模式-工厂模式
简单工厂模式:使用一个类来生成实例. 复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例. 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口.通过工 ...
- Ubuntu 13.04/12.10安装Oracle 11gR2图文教程(转)
Ubuntu 13.04/12.10安装Oracle 11gR2图文教程 原文标题:How to Install Oracle 11G R2 Enterprise Edition Database U ...
随机推荐
- java之aop
1.AOP:aspect orientied programming 面向切面编程.就是横向编程. 2.面向切面编程是在不改变原有代码的情况下增加新的功能. 3.在spring中面向切面编程有两种应用 ...
- 微软企业库支持 MySql
微软企业库支持 MySql 三步让企业库支持 mysql 数据库 1.创建 MySqlDatabaseData 类 using Microsoft.Practices.EnterpriseLibr ...
- MongoDB和Java(7):MongoDB用户管理
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- 2019 2345网址导航java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.2345网址导航等公司offer,岗位是Java后端开发,因为发展原因最终选择去了2345网址导航,入职一年时 ...
- Flutter — IDE Shortcuts for Faster Development
https://medium.com/flutter-community/flutter-ide-shortcuts-for-faster-development-2ef45c51085b If yo ...
- koa2---koa-bodyparser中间件
对于POST请求的处理,koa-bodyparser中间件可以把koa2上下文的formData数据解析到ctx.request.body中 安装: npm install --save koa-bo ...
- MySQL/MariaDB数据库的MHA实现高可用实战
MySQL/MariaDB数据库的MHA实现高可用实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL高可用常见的解决方案 1>.Multi-Master ...
- HashMap不足性分析
不足性: 1.缺陷就在于其高度依赖hash算法,如果key是自定义类,你得自己重写hashcode方法,写hash算法. 而且hashmap要求,存入时的hashcode什么样,之后就不能在变更,如果 ...
- Linux服务-bind
目录 1.安装bind 2.配置bind 3.添加正.反向解析域 3.1 指向生效的配置文件 3.2 生成配置文件cljhfy.com.zone和163.168.192.zone 4.验证 Linux ...
- 剑指offer:跳台阶问题
基础跳台阶 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 解题思路 这道题就是斐波那契数列的变形问法,因为跳上第N个台阶 ...