50分代码求解(有注释),大佬们看看,求AC代码
  • 板块学术版
  • 楼主Ellison2012
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/31 19:03
  • 上次更新2024/5/31 21:11:28
查看原帖
50分代码求解(有注释),大佬们看看,求AC代码
1022959
Ellison2012楼主2024/5/31 19:03

由于有学生总是不写新生组,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/5/31 19:03
加载中...