Codeforces #732D 二分 贪心
来源:互联网 发布:电脑地图软件 编辑:程序博客网 时间:2024/05/29 09:28
题目链接
题意:
给你n天和m课程,di表示这一天的状态,等于0说明可以复习课程或者休息,否则说明在这一天可以通过di课程。m个ai表示第i课程需要复习ai天,求最少通过所有课程的天数,若通过不了输出-1。
解析
二分可以通过的天数,然后判断在mid天数内,能否通过所有课程。judge时,从mid天开始到第一天:
1、
2、
代码
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include <stack>using namespace std;const int maxn = 100000+10;const int inf = 0x3f3f3f3f;int n, m;int a[maxn];int vis[maxn];struct node{ int sb, cur; node(){cur = 0;}}da[maxn];bool check(int day){ stack<node>s; memset(vis, 0, sizeof(vis)); int res = 0; for (int i=day; i>=1; i--) { if (da[i].sb != 0 && vis[da[i].sb] == 0){ //从最晚的课程,第一次遇到压入栈 da[i].cur = 0; s.push(da[i]); vis[da[i].sb] = 1; } else if ((da[i].sb == 0 || vis[da[i].sb] == 1) && !s.empty()) //为0或者课程不是第一次出现 取最近的课程给他安排复习 { node now = s.top(); s.pop(); now.cur++; if (now.cur == a[now.sb]) res++; else s.push(now); } } if (res == m) return true; else return false;}int main() { scanf("%d%d", &n, &m); for (int i=1; i<=n; i++) scanf("%d", &da[i].sb); for (int i=1; i<=m; i++) scanf("%d", &a[i]); int l=1, r=n; int ans = -1; while (l <= r){ int mid = (l+r)>>1; if (check(mid) == true) r = mid-1, ans = mid; else l = mid+1; } printf("%d\n", ans); return 0;}
0 0
- codeforces 732D (二分 贪心)
- 【codeforces 732D】【二分+贪心】
- Codeforces #732D 二分 贪心
- codeforces 732D Exams(贪心+二分)
- codeforces 732D Exams 二分搜索 贪心
- Codeforces 732D Exams【二分+贪心】
- CodeForces 732D Exams 二分+贪心
- codeforces - 732D Exams 【二分 + 贪心】
- CodeForces 732 D.Exams(二分+贪心)
- Codeforces 732D Exams【贪心+二分】
- Codeforces 609D 贪心+二分
- CodeForces 363D 【二分+贪心】
- CodeForces 614D 二分+贪心
- CodeForces-732D-Exams(二分 模拟 贪心)
- Codeforces 479D Long Jumps(贪心+二分)
- Exams Codeforces Round#377-D(贪心+二分)
- codeforces 377D exam贪心判定+二分
- CodeForces 363D.Renting Bikes(二分+贪心)
- 微信小程序例子——使用微信小程序拨打电话
- 微信小程序例子——打开微信小程序内置地图
- 微信小程序例子——获取自己所处的位置坐标
- PHP 双引号内的对象和数组
- 修改 Mac 默认 PHP 运行环境,给 MAMP 配置全局 Composer
- Codeforces #732D 二分 贪心
- request对象
- 简述Handler机制
- ffmpeg
- 关于安卓AudioTrack::getMinFrameCount的分析
- XEN do_hvm_op流程分析
- springmvc与ajax交互
- Linux常用高频命令tree、tar、cat、stat等(自总结)
- 非英文键盘组合键失效的一种可能