Codeforces Round #653 (Div. 3)E1 - Reading Books (easy)

E1 - Reading Books (easy version)

题意:一共有n本书,看完每本书都有一个花费时间,每本书上都有两个标记,小a是否喜换,小b是否喜换,小a小b是否共同喜换,他们只会阅读自己喜换的书,他们每个人至少阅读k本书,如果他俩共同喜换,那么花费阅读这一本书的时间,会使他俩已经阅读的书总是各加一,求花费最少时间阅读完成k本书的情况,如果无法完成则输出-1。
题解:
那么我们对每本书的情况进行分类
1.小a喜换小b不喜欢。
2.小b喜换小a不喜欢。
3.小a小b都喜欢。
4.小a小b都不喜欢。

这四种情况,可以看出第4种情况的书没有意义,我们直接丢弃即可(因为没人会去看)
那么我们先特判完不成的情况,如果min(第一种情况,第二种情况)+第三种情况,小于k,那么就说明没有那么多书可以让他们看,直接输出-1;
对于可以完成的情况,我们对a,b数组先排序,(a情况时间+b情况时间)=c情况时间。

所以我们可以把(a情况时间+b情况时间)(每次取最小a和b)丢尽优先队列,然后把c情况丢尽优先队列。
然后取有限队列前k个数相加即可

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 2e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;
int a[maxn],b[maxn],c[maxn];
int main()
{
    int n,k;
    cin>>n>>k;
    int cnt1=0,cnt2=0,cnt3=0;
    for(int i=0;i<n;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        if(y==1&&z==0) a[cnt1++]=x;
        else if(y==0&&z==1) b[cnt2++]=x;
        else if(y==1&&z==1) c[cnt3++]=x;
    }
    //cout<<cnt1<<cnt2<<cnt3<<endl;
    sort(a,a+cnt1);
    sort(b,b+cnt2);
    sort(c,c+cnt3);
    if(cnt3+min(cnt1,cnt2)<k){
        cout<<-1<<endl;
        return 0;
    }
    if(cnt3==0){
        ll ans=0;
        for(int i=0;i<k;i++){
            ans+=(ll)a[i]+(ll)b[i];
        }
        cout<<ans<<endl;
    }
    else{
        ll ans=0;
        priority_queue<ll,vector<ll>,greater<ll> >q;
        for(int i=0;i<cnt3;i++) q.push((ll)c[i]);
        for(int i=0;i<min(cnt1,cnt2);i++){
            q.push((ll)a[i]+(ll)b[i]);
        }
        for(int i=0;i<k;i++){
            ans+=q.top();
            q.pop();
        }
        cout<<ans<<endl;
    }
    return 0;

}

题解 文章被收录于专栏

主要写一些题目的题解

全部评论

相关推荐

好像有点准
我推的MK:感觉这个表格呢好像有用又好像没用,真有offer了不管加班多么严重也得受着,没offer管他加班什么样也只能看看,反正轮不到我选
点赞 评论 收藏
分享
05-07 13:29
已编辑
门头沟学院 Java
北斗导航Compass低仿版:能不能先搞清楚优先级啊,怎么可能是项目问题,项目很重要吗?又没学历 又没实习大厂凭啥约面?那玩具项目 没应用在真实生产环境下的 就算做上天又有什么用?早点找个小公司实习 拿小公司实习去投大厂实习,这才是你现在该做的
投递美团等公司10个岗位 简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务