思路:守门员单算,比较简单,剩下三种类型的拿中场说。
假设你有16个中场球员,他们是:(表格纯手打)(剩下几名球员power从60到72不等)
-------------- --------------
| name | power |
| -----------: | -----------: |
| 666 | 22 |
| god | 88 |
| messi | 99 |
| | |
-------------- --------------
4套阵容,分别要求3,4,3,6个中场球员
那第一套肯定是god,messi和72的那位了。
你会发现一个规律:
排完序后,power 分别是 99,88,72,71,70,69,68,67……60,22
每次抽剩下人里的前i个就行了。
代码如下
#include
using namespace std;
int a[100005],b[100005],c[100005],d[100005];
int k,g,f,m,q;
double tbh;
bool cmp(int a,int b){//从大至少排序
return a>b;
}
int main(){
cin>>k>>g>>f>>m;
for(int i=1;i<=k;i++)
cin>>a[i];
for(int i=1;i<=g;i++)
cin>>b[i];
for(int i=1;i<=f;i++)
cin>>c[i];
for(int i=1;i<=m;i++) //往死里输入
cin>>d[i];
sort(a+1,a+k+1,cmp);
sort(b+1,b+g+1,cmp);
sort(c+1,c+f+1,cmp);
sort(d+1,d+m+1,cmp);//往死里排序
cin>>q;
int l,z,y;
int x=1,r=1,w=1,h=1;
int sss;
while(q--){
cin>>l>>z>>y;
tbh=0;
tbh+=a[x];//守门员
x++;//序号++
for(int i=r;i<r+l;i++)
tbh+=b[i];//后卫
r+=l;
for(int i=w;i<w+z;i++)
tbh+=c[i];//中场
w+=z;
for(int i=h;i<h+y;i++)
tbh+=d[i];//前锋
h+=y;
printf("%.2f\n",tbh/11);//一共十一人
}
return 0;
}