40分求解,4WA,2TLE
查看原帖
40分求解,4WA,2TLE
679627
pry_123楼主2022/7/31 08:01
#include <iostream>
#include<iomanip>
using namespace std;
const int N=1e8;
int k,d,m,f,q,a,b,c,sum,cnt2,cnt3,cnt4;
int gatex[N],backx[N],middlex[N],frontx[N];

//自己写的快排函数
void QuickSort(int arr[],int left,int right)
{
    int i=left;
    int j=right;
    int base=arr[left];
    int temp;
    if(i>=j){
        return;
    }
    while(i<j)
    {
        //右边选小
        while(i<j&&arr[j]>=base)  j--;
        //左边选大
        while(i<j&&arr[i]<=base) i++;

        //选完之后 交换
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;

    }
    arr[left]=arr[j];
    arr[j]=base;
    QuickSort(arr,left,j-1);
    QuickSort(arr,j+1,right);
}
int main()
{

   //输入
   cin>>k>>d>>m>>f;

   for(int i=1;i<=k;i++) cin>>gatex[i];
   for(int i=1;i<=d;i++) cin>>backx[i];
   for(int i=1;i<=m;i++) cin>>middlex[i];
   for(int i=1;i<=f;i++) cin>>frontx[i];
   
   //调用快排函数----从小到大
   QuickSort(gatex,1,k);
   QuickSort(backx,1,d);
   QuickSort(middlex,1,m);
   QuickSort(frontx,1,f);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 //输入                         
  cin>>q;
  
  while(q--){

  cin>>a>>b>>c;
  //循环遍历守门员,每次选一个
   for(int i=k;i>=1;i--){
    if(gatex[i]!=0){
            sum+=gatex[i];
            gatex[i]=0;

            break;
      }

   }
   //循环遍历后卫,每次选a个
   for(int i=d;i>=1;i--){
        if(backx[i]!=0){
            sum+=backx[i];

            backx[i]=0;
            cnt2++;

        }
        if(cnt2==a){
            cnt2=0;
            break;
        }


        }
        //循环遍历中锋,每次选b个
    for(int i=m;i>=1;i--){
        if(middlex[i]!=0){
            sum+=middlex[i];

            middlex[i]=0;
            cnt3++;

        }
        if(cnt3==b){
            cnt3=0;
            break;
        }


        }
        //循环遍历前锋,每次选c个
    for(int i=f;i>=1;i--){
        if(frontx[i]!=0){
            sum+=frontx[i];

            frontx[i]=0;
            cnt4++;

        }
        if(cnt4==c){
            cnt4=0;
            break;
        }


        }

    cout<<fixed<<setprecision(2)<<sum*1.0/(1+a+b+c)<<endl;
    sum=0;
  }


}
2022/7/31 08:01
加载中...