首页 > 其他 > 详细

Codeforces Round #653 (Div. 3) E1. Reading Books (easy version) (贪心,模拟)

时间:2020-06-29 14:47:26      阅读:54      评论:0      收藏:0      [点我收藏+]

技术分享图片

  • 题意:有\(n\)本书,A和B都至少要从喜欢的书里面读\(k\)本书,如果一本书两人都喜欢的话,那么他们就可以一起读来节省时间,问最少多长时间两人都能够读完\(k\)本书.

  • 题解:我们可以分\(3\)种情况来存,即:

    ? 1.\(a=b=1\). 2.\(a=1,b=0\). 3.\(a=0,b=1\).

    对于2和3来说,我们可以将他们排序,然后合并到一起,最后放到第1种情况中再排一次序,取前\(k\)个前缀和即可.

  • 代码:

    int n,k;
    int t,x,y;
    int ans;
    vector<int> a,b,c;
    
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>n>>k;
         for(int i=1;i<=n;++i){
            cin>>t>>x>>y;
            if(x==1 && y==1){
                a.pb(t);
            }
            if(x==1 && y==0){
                b.pb(t);
            }
            if(x==0 &&y==1){
                c.pb(t);
            }
         }
         if(b.size()>c.size()) swap(b,c);
         if(a.size()+b.size()<k) cout<<-1<<endl;
         else{
            sort(b.begin(),b.end());
            sort(c.begin(),c.end());
            for(int i=0;i<b.size();++i){
                b[i]+=c[i];
            }
            sort(b.begin(),b.end());
            for(int i=0;i<b.size();++i){
                a.pb(b[i]);
            }
            sort(a.begin(),a.end());
            for(int i=0;i<k;++i){
                ans+=a[i];
            }
            cout<<ans<<endl;
         }
        return 0;
    }
    
    

Codeforces Round #653 (Div. 3) E1. Reading Books (easy version) (贪心,模拟)

原文:https://www.cnblogs.com/lr599909928/p/13207617.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!