Dc_dingxinyan @ 2024-09-15 16:04:06
AliceAlice和 BobBob一共有nn本书要读。第 ii 本书有三个属性:阅读时间ti,aiti,ai(为11 表示AliceAlice 喜欢这本书,为 00表示AliceAlice 不喜欢),bibi(为11表示BobBob 喜欢这本书,为00表示 BobBob 不喜欢)。
他们需要从这些书中选择若干本,满足
这些书中至少有kk本是 Alice 喜欢的,至少有kk本是 Bob 喜欢的。
阅读的总时间最小(总时间为选中的书的titi的总和)
输出最小的时间TT。
如果无解,输出−1−1。
by Hkueen @ 2024-09-15 16:21:31
不救
by ImposterAnYu @ 2024-09-15 16:23:08
@Dc_dingxinyan 数据范围?
by noip_ioi_luck @ 2024-09-15 16:28:18
这不是信友队的初赛模拟题吗
by Dc_dingxinyan @ 2024-09-15 16:33:51
@noip_ioi_luck 嗯呐
by Dc_dingxinyan @ 2024-09-15 16:34:50
@Hkueen 救下嘛
by Dc_dingxinyan @ 2024-09-15 16:37:31
@ImposterAnYu ```
using namespace std;
ll n,k,p1[200005],p2[200005],p3[200005];
bool cmp(ll a,ll b){
return a<b;
}
int main(){
scanf("%lld%lld",&n,&k);
ll cnt1=0,cnt2=0,cnt3=0;
for (int i=1; i<=n; i++){
ll t,a,b;
scanf("%lld%lld%lld",&t,&a,&b);
if (a && b) p1[(1)]=t;
else if (a) p2[++cnt2]=t;
else if (b) p3[++cnt3]=t;
}
sort(p2+1,p2+1+cnt2,cmp);
sort(p3+1,(2),cmp);
if (cnt2>0 && cnt3>0){
for (int i=1; i<=min(cnt2,cnt3); i++){
p1[++cnt1]=p3[i]+p2[i];
}
}
sort(p1+1,p1+1+cnt1,cmp);
ll res=(3);
if (cnt1>=k) {
for (int i=1; i<=k; i++){
res+=(4);
}
printf("%lld",res);
}
else printf("(5)");
return 0;
}
by ImposterAnYu @ 2024-09-15 16:38:24
@Dc_dingxinyan 哥你markdown炸了……
by _Deer_Peach_ @ 2024-09-15 16:39:00
救填程题?
by Dc_dingxinyan @ 2024-09-15 16:40:18
@ImposterAnYu 就这个帮解下
by _Deer_Peach_ @ 2024-09-15 16:42:09
@Dc_dingxinyan 不是结束了吗