题目大意:Alice和Bob一共有本书要读。第本书有三个属性:阅读时间,(为表示 Alice喜欢这本书,为表示Alice不喜欢),(为表示Bob喜欢这本书,为表示Bob不喜欢)
他们需要从这些书中选择若干本,满足:
思路:思维题
对于这本书,我们可以分为三类,A、B都喜欢的,A喜欢的,B喜欢的(都不喜欢的书直接扔了)我们把这三类书每本所花时间用三个数组、、记录
Code:
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10,mod=1e9+7;
typedef long long ll;
ll n,k,t1[N],t2[N],t3[N];
ll a,b,c;
int main(){
ll cnt1=0,cnt2=0,cnt3=0;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
if(b==0&&c==0) continue;
if(b==1&&c==0) t1[++cnt1]=a;
if(b==0&&c==1) t2[++cnt2]=a;
if(b==1&&c==1) t3[++cnt3]=a;
}
sort(t1+1,t1+cnt1+1);
sort(t2+1,t2+1+cnt2);
for(int i=1;i<=min(cnt2,cnt1);i++) t3[++cnt3]=t1[i]+t2[i];
sort(t3+1,t3+1+cnt3);
ll ans=0;
if(cnt3<k) cout<<"-1"<<endl;
else{
for(int i=1;i<=k;i++) ans+=t3[i];
cout<<ans<<endl;
}
return 0;
}