首页 > 其他分享 >CF732D Exams 题解

CF732D Exams 题解

时间:2022-12-25 18:33:36浏览次数:65  
标签:int 题解 sum CF732D mid Exams include type exams

题目链接

题目分析:

首先可以发现,如果当前第 \(i\) 天可以完成所有考试,那么第 \(i + 1\) 天一定也可以。因此,答案具有单调性。考虑二分,将原问题转换为判定性问题。

判定是否合法时,我们使用贪心。贪心地想,最后一场考试一定要考,因为这样可以积累更多的时间复习。因此我们可以倒着从后往前判断,让后面的试尽可能被考。

Code

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

const int N = 100010;
bool exams[N];
int n, m, type[N], day[N];

bool check(int n) {
    memset(exams, false, sizeof exams);
    int sum = 0;
    for (int i = n; i; i -- ) {
        if (type[i] && !exams[type[i]])
            sum += day[type[i]], exams[type[i]] = true;
        else if (sum) sum -- ;
    }
    if (sum) return false;
    for (int i = 1; i <= m; i ++ ) if (!exams[i]) return false;
    return true;
}

int solve(int l, int r) {
    if (l >= r) return l;
    int mid = l + r >> 1;
    return check(mid) ? solve(l, mid) : solve(mid + 1, r);
}

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i ++ )
        scanf("%d", &type[i]);
    for (int i = 1; i <= m; i ++ )
        scanf("%d", &day[i]);
    if (!check(n)) return puts("-1"), 0;
    printf("%d\n", solve(1, n));
    return 0;
}

标签:int,题解,sum,CF732D,mid,Exams,include,type,exams
From: https://www.cnblogs.com/LcyRegister/p/17004359.html

相关文章

  • AT_jag2018summer_day2_a 10^N+7 题解
    题目传送门题目大意有三个非负整数$x,y,z$,找到符合以下条件的最小非负整数\(n\);$n\{\rm\mod}\10^1+7\=\x$$n\{\rm\mod}\10^2+7\=\y$$n\{\rm\mo......
  • CF864C Bus 题解
    题目传送门题目大意一辆汽车从\(0\)到\(a\)往返\(k\div2\)次(也就是去算一次,回算一次);原来有\(b\)升油,每行驶一单位距离消耗一升油,在\(f\)有加油站(可以加满油......
  • UVA13197 Cuberoot This 题解
    题目传送门题目大意求满足\(x^3\bmodp=a\)且\(x<p\)的数\(x\),升序输出。解题思路在\(0\)到\(p-1\)的范围内,查找满足条件的\(x\);值得注意的是,输出要留意:最......
  • AT_joi2022_yo1a_d 箱と鍵 (Boxes and Keys) 题解
    题目传送门题目大意给定一个长度为\(n\)的数组\(a\)和一个长度为\(m\)的数组\(b\),求\(a\)中有多少个数在\(b\)中出现过。解题思路数据比较小,可以直接暴力:......
  • CF1735A Working Week 题解
    题目传送门题目大意一周有\(n\)天,有三天休息日,其中第\(n\)天一定休息。现需要安排剩下的两个休息日,要求:不能使得休息日相邻。这两个休息日将\(n-1\)天分成三......
  • AT_mujin_pc_2018_b セキュリティ 题解
    题目传送门题目大意房间原有\(A\)人,+表示进来一个人,-表示出去一个人;求是否有一个时间,房间内的人数为\(0\)。解题思路按题意进行模拟:首先判断\(A\)是否等于零,......
  • AT_pakencamp_2021_day2_c Participants 3 题解
    题目传送门题目大意找出没有参加第\(1\)天的比赛,但是参加了第\(2\)天的比赛人的ID。解题思路从第一次比赛人员的ID中,查找是不是没有有第二次比赛人员的ID。如......
  • UVA694 The Collatz Sequence 题解
    题目传送门题目大意根据题目中的规定生成序列,问有多少次计算;注意输入以“\(\-1\)\(\-1\)”结尾。解题思路按照题目中所说的进行模拟。在保证\(a\)不大于\(l\)......
  • CF317A Perfect Pair 题解
    题目传送门题目大意给定一对数\(x\)和\(y\),允许把其中的一个数换成\(x+y\),问把\(x\)或\(y\)变成大于或等于\(m\)的数,需要几次操作。解题思路首先可以判断......
  • UVA12459 Bees' ancestors 题解
    题目传送门题目大意雌蜂有一个父亲一个母亲,而雄蜂只有母亲。计算出Willy的祖先中,哪一代有多少祖先。解题思路已知Willy为雄蜂,从Willy开始向前推:有一个母亲(1);......