C++题目:新的篮球队(题集)



1. 新的篮球队1
题目描述
很多人希望加入中国篮球队,每个人都有一个身高 h h h(单位:纳米)。
教练打算让所有人中身高最高的5个人首发出场,请列出这5个人的身高。
输入格式
第一行,一个整数 n n n,表示应招的队员人数。
之后 n n n行,每行一个整数 h h h,分别为每个球员的身高,保证所有队员的身高互不相同。
输出格式
输出为 5 5 5行,分别为身高第 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5高的人的身高。
样例 #1
样例输入 #1
7
1500000000
1600000000
1700000000
1800000000
1900000000
2000000000
2100000000
样例输出 #1
2100000000
2000000000
1900000000
1800000000
1700000000
样例 #2
样例输入 #2
10
1623741820
2147483640
1728490184
1204748364
1833238548
1518993456
1937986912
1414245092
2042735276
1309496728
样例输出 #2
2147483640
2042735276
1937986912
1833238548
1728490184
提示
5 ≤ n ≤ 7 , 500 , 000 5 \le n \le 7,500,000 5≤n≤7,500,000;
1100000000 ≤ h ≤ 2147483647 1100000000 \le h \le 2147483647 1100000000≤h≤2147483647;
答案
#include<bits/stdc++.h>
using namespace std;
int n, a[7500005];
int main()
{
ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= 5; i++) {
for (int j = i + 1; j <= n; j++) {
if (a[j] > a[i])
swap(a[j], a[i]);
}
}
for (int i = 1; i <= 5; i++)
cout << a[i] << endl;
return 0;
}
2. 新的篮球队2
题目描述
很多人希望加入中国篮球队,每个人都有一个身高 h h h(单位:纳米)。初始时, n n n个人按身高从高到低的顺序排好队了,但因为一些骚动,他们在队伍中的位置发生了变化。
不过好在变化的并不多,每个人现在的位置跟当初相差不超过 5 5 5(例如,原先队伍中排在第 100 100 100的人,现在一定在第 95 ∼ 105 95\sim 105 95∼105范围内)
教练打算让所有人中身高分别为从高到低第 a , b , c , d , e a,b,c,d,e a,b,c,d,e名的队员出场,请列出这 5 5 5个人的身高。
输入格式
第一行,一个整数 n n n,表示球员人数;
之后 n n n行,每行一个整数 h h h,为现在从前到后每个球员的身高;
之后 5 5 5行,分别为 5 5 5个整数 a , b , c , d , e a,b,c,d,e a,b,c,d,e,保证 5 5 5个数各不相同,且在 1 ∼ n 1\sim n 1∼n的范围内。
输出格式
输出为 n n n行,每行一个整数,为当初(从高到低排好序的),从前到后每个球员的身高。
样例 #1
样例输入 #1
10
1937986919
1833238555
1728490191
1623741827
2042735283
1204748371
1100000007
1518993463
1414245099
1309496735
3
5
1
7
8
样例输出 #1
1833238555
1623741827
2042735283
1414245099
1309496735
提示
5 ≤ n ≤ 7500000 5 \le n \le 7500000 5≤n≤7500000;
1100000000 ≤ h ≤ 2147483647 1100000000 \le h \le 2147483647 1100000000≤h≤2147483647;
1 ≤ a , b , c , d , e ≤ n 1 \le a,b,c,d,e \le n 1≤a,b,c,d,e≤n;
答案
#include<bits/stdc++.h>
using namespace std;
int n, a[7500005];
int main()
{
ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++) {
for (int j = i; j > 1 && a[j] > a[j - 1]; j--) {
swap(a[j], a[j - 1]);
}
}
int pos;
for (int i = 1; i <= 5; i++) {
cin >> pos;
cout << a[pos] << endl;
}
return 0;
}
3. 新的篮球队3
题目描述
很多人希望加入中国篮球队,每个人都有一个身高 h h h(单位:微米),这次只精确到微米是因为教练懒得量那么准了。
教练打算让所有人中身高分别为从高到低第 a , b , c , d , e a,b,c,d,e a,b,c,d,e名的队员出场,不计并列(例如 3 3 3个人并列第 5 5 5名,我们就认为他们分列 5 , 6 , 7 5,6,7 5,6,7名)。请列出这5个人的身高。
输入格式
第1行,1个整数 n n n,表示应招的队员人数。
之后 n n n行,每行 1 1 1个整数 h h h,为每个球员的身高,这次不保证所有球员的身高互不相同。
之后 5 5 5行,分别为 5 5 5个整数 a , b , c , d , e a,b,c,d,e a,b,c,d,e,保证 5 5 5个数各不相同,且在 1 1 1~ n n n的范围内。
输出格式
输出为5行,分别为身高从高到低的第 a , b , c , d , e a,b,c,d,e a,b,c,d,e名的身高。
样例 #1
样例输入 #1
10
1116807
1575249
1750073
2043658
1208930
1311272
1127544
1950878
1877923
1337709
1
6
3
8
4
样例输出 #1
2043658
1337709
1877923
1208930
1750073
提示
【样例1解释】
所有球员按身高排序后为:
第1:2043658
第2:1950878
第3:1877923
第4:1750073
第5:1575249
第6:1337709
第7:1311272
第8:1208930
第9:1127544
第10:1116807
容易发现第 1 , 6 , 3 , 8 , 4 1,6,3,8,4 1,6,3,8,4高的球员身高分别是:
2043658
1337709
1877923
1208930
1750073
【数据规模】
5 ≤ n ≤ 7 , 500 , 000 5 \le n \le 7,500,000 5≤n≤7,500,000;
1100000 ≤ h ≤ 2100000 1100000 \le h \le 2100000 1100000≤h≤2100000;
1 ≤ a , b , c , d , e ≤ n 1 \le a,b,c,d,e \le n 1≤a,b,c,d,e≤n
答案
#include<bits/stdc++.h>
using namespace std;
int n,a[7500001],b[2100001],t;
int main(){
ios::sync_with_stdio(0);
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
b[a[i]]++;
}
int cur=1;
for(int i=2100001;i>=1;i--){
for(int j=1;j<=b[i];j++){
a[cur++] = i;
}
}
for(int i=1;i<=5;i++){
cin >> t;
cout << a[t] << endl;
}
return 0;
}
4. 新的篮球队4
题目背景
中国的篮球队表现不佳,教练打算从全国广招人才,重新组建篮球队。但他的水平有限,不太搞得清楚谁篮球打的好,所以只好选身高最高的。
来自某小学的 5 5 5位校队队员看了国家队之前的比赛,觉得自己也有实力试一试。
题目描述
很多人希望加入中国篮球队,每个人都有一个身高 h h h(单位:纳米)。初始时,已经有 n n n个人按身高从高到低的顺序排好队了,但有5名同学来晚了,请按他们每个人的身高给他们安排合适的位置,使得他们进入队伍后,队伍仍是从高到低排列的。
请确定这5个人在队列中的位置(从前到后的第几个)并输出。
输入格式
第一行,一个整数 n n n,表示已经排好队的球员人数。
之后 n n n行,每行一个整数,为已经排好队的每个球员的身高。
之后 5 5 5行,每行一个整数,分别为五名迟到同学的身高。
保证所有人的身高互不相同。
输出格式
输出为 5 5 5行,分别为 5 5 5位同学的位置(从前到后的第几个)。
5 5 5个数从小到大排列。
样例 #1
样例输入 #1
7
2100000000
2000000000
1900000000
1800000000
1700000000
1600000000
1500000000
1550000000
1650000000
1750000000
1850000000
1950000000
样例输出 #1
3
5
7
9
11
样例 #2
样例输入 #2
10
2042735283
1937986919
1833238555
1728490191
1623741827
1518993463
1414245099
1309496735
1204748371
1100000007
1100016807
1382475249
1722650072
2084943658
1244108929
样例输出 #2
1
6
10
12
14
提示
【样例1解释】
原有的 7 7 7个人已经按身高排好了序,新来的 5 5 5名同学加入后,所有 12 12 12个人的身高排序为:
2100000000
2000000000
1950000000
1900000000
1850000000
1800000000
1750000000
1700000000
1650000000
1600000000
1550000000
1500000000
容易看出新来的同学分列第 3 , 5 , 7 , 9 , 11 3,5,7,9,11 3,5,7,9,11名。
【数据规模】
5 ≤ n ≤ 7 , 500 , 000 5 \le n \le 7,500,000 5≤n≤7,500,000;
1100000000 ≤ h ≤ 2147483647 1100000000 \le h \le 2147483647 1100000000≤h≤2147483647;
答案
#include<bits/stdc++.h>
using namespace std;
int n, a[7500005];
int main()
{
ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n + 5; i++)
cin >> a[i];
for (int i = n + 1; i <= n + 5; i++)
for (int j = i + 1; j <= n + 5; j++)
if (a[j] > a[i])
swap(a[j], a[i]);
int ans[10];
for (int i = n + 1; i <= n + 5; i++) {
for (int j = i; j >= 1; j--) {
if (j != 1 && a[j] > a[j - 1])
swap(a[j], a[j - 1]);
else {
ans[i - n] = j;
break;
}
}
}
for (int i = 1; i <= 5; i++) {
cout << ans[i] << endl;
}
return 0;
}