相当于暴力吧,判断的凳子数与购物车数的大小;
#include<bits/stdc++.h> using namespace std; int a[100100],b[100100],cnt; int main() { int t; cnt=0; cin>>t; while(t--) { int n,m; cnt=0; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; cin>>b[i]; if(b[i]) cnt++; } double sum=0; if(cnt>=m){//如果凳子数大于购物车数 sort(a+1,a+1+n);//排序 for(int i=n;i>=n-m+1;i--)//最大的m个数,都是半价 sum+=((double)a[i])/2; for(int j=1;j<=n-m;j++) sum+=(double)a[j]; printf("%0.1f\n",sum); } else{ sort(a+1,a+1+n); for(int i=n;i>=n-cnt+1;i--)//最大的cnt(凳子数)都是半价 sum+=((double)a[i])/2; for(int j=1;j<=n-cnt;j++) sum+=(double)a[j]; printf("%0.1f\n",sum); } memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); } }