CF 589F 贪心+二分
2016-07-26 21:29
453 查看
题意是有N道菜,需要吃到每一种菜,且每种菜要吃相同时间。
那么按时间右端点排序,再依次有空则吃。为什么这样贪心是正确的呢,因为选择更早结束的菜,那么之后就会剩下更多的时间去吃其余的菜,那么贪心是正确的。
那么按时间右端点排序,再依次有空则吃。为什么这样贪心是正确的呢,因为选择更早结束的菜,那么之后就会剩下更多的时间去吃其余的菜,那么贪心是正确的。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=110; int n; bool vis[10010]; struct node { int a,b; bool operator<(const node &x) const { return b<x.b; } }t[maxn]; bool check(int mid) { //memset(vis,0,sizeof(vis)); for(int i=0;i<10010;i++) { vis[i]=false; } for(int i=1;i<=n;i++) { if(t[i].b-t[i].a<mid) return false; int cnt=0; for(int j=t[i].a;j<t[i].b;j++) { if(cnt>=mid) break; if(!vis[j]) { vis[j]=true; cnt++; } } if(cnt<mid) return false; } return true; } int bin(int l,int r) { int ans=l; while(l<=r) { int mid=(l+r)>>1; if(check(mid)) { ans=mid; l=mid+1; } else r=mid-1; } return ans; } int main() { while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) { scanf("%d%d",&t[i].a,&t[i].b); } sort(t+1,t+1+n); printf("%d\n",bin(0,t .b)*n); } return 0; }
相关文章推荐
- HDOJ-----1551二分
- NodeJS入门篇---Express+MongoDB实现blog----《NodeJS开发指南》爬坑
- bzoj3223 文艺平衡树
- python简单爬虫爬取队列的实现
- 【学习】ie-css3.htc---让ie8以下支持css3
- sublime3最新版破解码 linux下也适用
- Java NIO学习
- Zabbix-3.0.3结合Grafana-3.1.0给你想要的绘图
- MyBatis的关于批量数据操作的测试
- 设计模式-builder模式
- 《邪气凛然》读后感
- Test3
- 模拟时间
- Android Studio 提交现有项目到osc
- C语言实验——整数位(用顺序表)
- SlidingMenu+Fragment组合
- 科学与艺术
- [leetcode]215. Kth Largest Element in an Array
- hdu1251-字符前缀查找问题 map容器
- Cable master<hdoj1551>