1 条题解
-
0
自动搬运
来自洛谷,原作者为

Ousmane_Dembele
**搬运于
2025-08-24 21:53:45,当前版本为作者最后更新于2018-04-22 19:22:22,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
我也不知道为什么没人打暴力,10的五次方O(10n)轻松能过,甚至不需要读入优化。
思路:守门员单算,比较简单,剩下三种类型的拿中场说。
假设你有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 <bits/stdc++.h> 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; }
- 1
信息
- ID
- 2844
- 时间
- 1000ms
- 内存
- 250MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者