用C++解决这个问题:958. 传球 题目描述 你是学校篮球队的教练员,队里共n名球员,一字排开,第i人的位置为x[i],各不相同,代表他距离队伍左端的距离。现在你要传球给其中的若干个球员,他们会各自传给离自己最近的球员(若距离相同就给靠左的)。请问要让每个球员都摸到篮球,你需要传出去几个球? 输入输出格式 输入格式 输入文件为pass.in 第一行为正整数n。n<=200000 第二行为n个整数代表每人的位置x[i],均在0到1000000之间. 【数据规模与约定】 50%数据,n<=1000 100%数据,n<=200000 输出格式 输出文件为pass.out 输出一个整数 输入输出样例 输入样例#1: 5 9 10 5 1 2 输出样例#1: 2 【说明】传球给9,9传给10。传球给5, 5传给2, 2传给1。 输入样例#2: 4 1 2 4 8 输出样例#2: 1 【说明】传给8即可
时间: 2024-04-10 09:28:19 浏览: 162
你好!对于这个问题,你可以使用以下的C++代码来解决:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n;
std::cin >> n;
std::vector<int> positions(n);
for (int i = 0; i < n; i++) {
std::cin >> positions[i];
}
int ballsPassed = 0;
int nearestPlayer = positions[0];
for (int i = 1; i < n; i++) {
if (positions[i] <= nearestPlayer) {
ballsPassed++;
nearestPlayer = positions[i];
}
}
std::cout << ballsPassed << std::endl;
return 0;
}
```
这段代码首先读取输入的n,然后读取每个球员的位置。接下来,使用一个变量ballsPassed来记录传出去的球的数量,以及一个变量nearestPlayer来记录当前最近的球员的位置。从第二个球员开始遍历,如果当前球员的位置小于或等于nearestPlayer,则传球给该球员,并将ballsPassed加一,同时更新nearestPlayer为当前球员的位置。最后输出ballsPassed即可。
你可以将输入数据保存到一个名为pass.in的文件中,然后运行代码,将结果输出到pass.out文件中。
希望这个代码能够帮助到你!如果有任何疑问,请随时问我。
阅读全文