显然要二分答案,然后对于一个天数,我们来判断是否可以通过所有考试,这里就贪心来安排就好了。

首先我们希望每门课的考试时间越晚越好,然后就是先复习最早开始的考试。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 vector<int> pos[100010];
 5 int d[100010];
 6 int a[100010];
 7 int n, m;
 8
 9 bool judge(int mid)
10 {
11     vector<pair<int, int>> course;
12     for (int i = 1; i <= m; i++)
13     {
14         vector<int>::iterator it = upper_bound(pos[i].begin(), pos[i].end(), mid);
15         if (it == pos[i].begin())
16             return false;
17         it--;
18         course.push_back({*it, i});
19     }
20     sort(course.begin(), course.end());
21     int used = 0;
22     for (auto &c : course)
23     {
24         if (c.first - 1 - used < a[c.second])
25             return false;
26         used += a[c.second] + 1;
27     }
28     return true;
29 }
30
31 int main()
32 {
33     scanf("%d%d", &n, &m);
34     for (int i = 1; i <= n; i++)
35     {
36         scanf("%d", d + i);
37         if (d[i] > 0)
38             pos[d[i]].push_back(i);
39     }
40     for (int i = 1; i <= m; i++)
41         scanf("%d", a + i);
42     int l = 1, r = n;
43     if (!judge(n))
44         puts("-1");
45     else
46     {
47         while (l < r)
48         {
49             int mid = l + r >> 1;
50             if (judge(mid))
51                 r = mid;
52             else
53                 l = mid + 1;
54         }
55         printf("%d", l);
56     }
57     return 0;
58 }

转载于:https://www.cnblogs.com/iRedBean/p/5975454.html

Codeforces732D Exams相关推荐

  1. codeforces732D Exams(二分)

    题意: 给出一串数字,代表了第i天能够进行哪场考试,如果为0就不能考试,每天只能考一场.一共要考m场试,每门科目要a[i]的复习时间,所以问最快第几天能够考完所有科目. 要点: 一开始我觉得BFS可以 ...

  2. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...

  3. F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数

    F - Tmutarakan Exams 题意 : 从 < = S 的 数 中 选 出 K 个 不 同 的 数 并 且 gcd > 1 .求方案数.   思路 :记 录 一 下 每 个 数 ...

  4. 【小罗的hdlbits刷题笔记2】补码运算中溢出的问题(Exams/ece241 2014 q1c)

    关于补码运算中进位溢出的问题及延伸,hdlbits中Exams/ece241 2014 q1c给出了很好的解释,首先来看问题: Assume that you have two 8-bit 2's c ...

  5. Verilog刷题HDLBits——Exams/ece241 2014 q7a

    Verilog刷题HDLBits--Exams/ece241 2014 q7a 题目描述 代码 结果 题目描述 Design a 1-12 counter with the following inp ...

  6. 【URAL】1091 Tmutarakan Exams

    题意:取k个不同的数,每个数不超过s,问种数. 若kx1,kx2,...,kx3满足条件,则x1,x2,...,x3必然满足条件. 因此枚举素数容斥,2*3*5*7>50,所以枚举之多三层. 1 ...

  7. URAL 1091. Tmutarakan Exams

    http://acm.timus.ru/problem.aspx?space=1&num=1091 题意:给你两个数K,S,让你从1~S中挑选K个数使得他们的最大公约数大于1,问你有多少种方法 ...

  8. RETIRED CERTIFICATIONS AND EXAMS AND BADGES(VMware 正式命名方式变更以及考试退役时间)

    https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/certification/vmw-certification-re ...

  9. HDLBits Exams/ece241 2013 q4 水库题

    题目和简述 题目内容翻译: 大型水库可为多个用户提供服务.为了使水位足够高,三个传感器以5英寸的间隔垂直放置.当水位高于最高传感器(S3)时,输入流量应为零.当液位低于最低传感器(S1)时,流量应最大 ...

最新文章

  1. 数据科学家需要了解的5大聚类算法
  2. 如何建立应付暂估明细查询
  3. java面试设计模式
  4. ReactiveX流式编程—从xstream讲起
  5. ImportError: No module named _caffe
  6. struts2入门之action获取表单提交数据
  7. 《Entity Framework 6 Recipes》中文翻译——第十二章自定义EntityFramework对象(一)...
  8. TCP实现消息传输和文件传输,UDP实现消息发送和聊天,URL下载文件
  9. Emacs 新闻组 之四 联系人管理
  10. 智齿客服网页端接入文档V2.3
  11. oracle-外币记账时总账余额表gl_balance变化(上)
  12. MIUI v5内测版泄漏!
  13. sql server之T-SQL语句创建数据库创建表
  14. 牛顿迭代法计算平方根
  15. linux系统--文件目录
  16. 所有Android 开发者都要知道的开发常识
  17. 超星系统登录,信息爬取
  18. 一点儿考研经验+这一年的总结0.0
  19. Fluent Meshing 高效准确读入CAD模型343攻略
  20. 目录:什么是设计模式

热门文章

  1. sizeof 的结果取决于什么
  2. 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14
  3. 适配器模式(为被封装对象提供不同的接口)
  4. Reference和ReferenceQueue
  5. jdk动态代理与cglib动态代理--InvocationHandler--MethodInterceptor
  6. 操作系统(十)进程通信
  7. UNIX再学习 -- 内存管理
  8. go-ethereum-code-analysis 以太坊源码分析
  9. Android Hook神器——XPosed入门(登陆劫持演示)
  10. 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?