Codeforces Round #653 (Div. 3) E1. Reading Books (easy version) (贪心,模拟)
-
题意:有\(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; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮