zoukankan      html  css  js  c++  java
  • Codeforces 732D [二分 ][贪心]

    /*
    不要低头,不要放弃,不要气馁,不要慌张
    题意:
    n天进行m科考试,每科考试需要a的复习时间,n天每天最多可以考一科。并且指定哪天考哪科。
    注意考试那天不能复习。
    问最少需要多少天可全部通过考试。
    
    思路:
    转化为判定性问题。二分天数。
    然后贪心,在规定天数以内,最后一天通过即可。需要保证每一科最后一天之前剩下还没考试的科目都来得及复习。(同时注意要要加上考试时间)
    最后还要判定是不是所有的科目都通过了。
    */
    
    #include<bits/stdc++.h>
    using namespace std;
    long long a[100050],b[100050],sum;
    int n,m;
    bool pf(int la){
        set<int>mm;
        long long tt=sum;
        for(int i=la;i>=1;i--){
            if(a[i]){
                if(mm.find(a[i])==mm.end()){
                    int gg=mm.size();
                    if(tt+m-gg<=i){
                        mm.insert(a[i]);
                        tt-=b[a[i]];
                    }
                    else return 0;
                }
    
            }
        }
        if(!tt)return 1;
        else return 0;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%lld",a+i);
        for(int i=1;i<=m;i++)scanf("%lld",b+i);
        for(int i=1;i<=m;i++)sum+=b[i];
        int l=1,r=n;
        while(l<=r){
            int mid=(l+r)>>1;
            if(pf(mid))r=mid-1;
            else l=mid+1;
        }
        if(l>n)puts("-1");
        else printf("%d
    ",l);
    }
  • 相关阅读:
    MSSQL如何将查询结果拼接成字符串
    SQL删除指定条件的重复数据,只保留一条
    清除日志
    jsp使用
    Eclipse使用
    SSM框架开发遇到的问题
    SpringMvc学习
    大中华~~汉字
    Word技巧设置
    AWS-资源访问慢分析
  • 原文地址:https://www.cnblogs.com/tun117/p/5978829.html
Copyright © 2011-2022 走看看