Codeforces Round #653 (Div. 3) E1. Reading Books (easy version)(思维)

 

 

 给出 n 本书的阅读时间以及 A,B 是否愿意读,1 表示愿意,0 表示不愿意,A,B 每个人都要看 k 本书,但如果两个人都喜欢看一本书,那么只要有一个人看了,两个人就算都看了,问两人看完所有书花费的最小时间

const int N=2e5+5;

    int n,m;
    int i,j,k;
    int a[N];
    vector<int> u,v,w;

int main()
{
    while(~sdd(n,k)){
        ll ans=0;
        forn(i,1,n){
            int c,x,y;
            sddd(c,x,y);
            if(x && y) w.pb(c);
            else if(x) u.pb(c);
            else if(y) v.pb(c);
        }
        sort(u.begin(),u.end());
        sort(v.begin(),v.end());
        sort(w.begin(),w.end());
        if(u.size()+w.size()<k ||w.size()+v.size()<k){
            pd(-1);
            continue;
        }
        int i=0,j=0,cur=0;
        while(k>0){
            if(i>=u.size() || j>=v.size() || (cur<w.size() && w[cur]<u[i]+v[j])) cur++,k-=1,ans+=w[cur-1];
            else i++,j++,k-=1,ans+=u[i-1]+v[j-1];
        }
        pll(ans);
    }
    //PAUSE;
    return 0;
}