大佬们看看,我卡50分,站外题求助!!!
  • 板块学术版
  • 楼主Ellison2012
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/1 08:31
  • 上次更新2024/6/1 10:39:52
查看原帖
大佬们看看,我卡50分,站外题求助!!!
1022959
Ellison2012楼主2024/6/1 08:31

由于有学生总是不写新生组,hehe老师心里很伤心。伤心的hehe老师要去大学上班,经过了一条长长的桥。

该桥上有人往左边走,有人往右边走。

每个人都只能沿着桥向前走,速度是 1m/s。

当两个人碰面的时候,它们会同时掉头往相反的方向走。

这些人中,当然也有hehe老师,wuwu老师,fufu老师,lala老师等。

伤心的hehe老师与其他人碰面的时候会把伤心传给碰面的人。

同时伤心的人在和其它人碰面时,也会把伤心传染给碰到的人。

请你计算,当所有人都离开天桥时,有多少人伤心了。

输入格式 第一行是一个数 n ;

第二行是 n 个用空格分开的整数 xi​( −100≤x i​≤100 ), ∣x i​∣表示每一个人距离大桥最左边的距离。正值表示人朝右走,负值表示人朝左走,数据中不会出现 0 值,也不会出现两个人占用同一位置。其中,第一个位置代表的是hehe老师的位置。

输出格式

1 个整数,表示最后伤心的人的数目。

输入数据1

3

5 -2 8

输出数据1

1

输入数据 2

3

1 -2 8

输出数据 2

2

样例解释

样例1中第二个人和第三个人不会和hehe碰面,因此只有hehe老师伤心。

样例2中第二个人会和hehe碰面,因此他也伤心了。所以是两个人伤心。

测评数据规模 对于 100% 的数据,

1≤n≤100,

−100≤xi≤100。

50分

#include <iostream>
#include <vector>
#include <algorithm> // 引入algorithm头文件

using namespace std;

int countSadPeople(int n, vector<int>& positions) {
    vector<int> sadness(n, 0); // 初始化每个人的伤心值为0
    for (int i = 0; i < n; ++i) { // 遍历每个人
        for (int j = 0; j < n; ++j) { // 计算每个人与其他人的碰面情况
            if (i != j) { // 除去自身
                int distance = positions[j] - positions[i]; // 计算距离
                if ((distance > 0 && positions[i] > 0) || (distance < 0 && positions[i] < 0)) { // 如果两人同向且在同一侧
                    sadness[i] += 1; // 当前人伤心值加1
                }
            }
        }
    }
    
    // 统计最大伤心值的人数
    int maxSadness = *max_element(sadness.begin(), sadness.end());
    return count(sadness.begin(), sadness.end(), maxSadness);
}

int main() {
    int n;
    cin >> n; // 输入人数
    vector<int> positions(n);
    for (int i = 0; i < n; ++i) {
        cin >> positions[i]; // 输入每个人的位置
    }
    
    // 调用函数并输出结果
    cout << countSadPeople(n, positions) << endl;
    
    return 0;
}
2024/6/1 08:31
加载中...