鱼C论坛

 找回密码
 立即注册
查看: 1795|回复: 3

管理员删帖

[复制链接]
发表于 2023-10-8 23:03:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 叼辣条闯世界 于 2023-10-9 22:04 编辑

10.9更:自己过了
管理员删帖
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 23:03:57 | 显示全部楼层
这道题可以用一个哈希表来存储每个学校所在学区的代码,然后遍历每个学校,检查是否存在一个学校的前两个字母与当前学校所在学区的代码相同,且当前学校的前两个字母与另一个学校所在学区的代码相同。如果存在,则说明这两个学校是友好结对学校。

以下是示例代码:

  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <string>

  4. using namespace std;

  5. int main() {
  6.     int n;
  7.     cin >> n;

  8.     unordered_map<string, string> schoolMap; // 哈希表存储每个学校所在学区的代码
  9.     for (int i = 0; i < n; i++) {
  10.         string name, area;
  11.         cin >> name >> area;
  12.         schoolMap[name] = area;
  13.     }

  14.     int count = 0;
  15.     for (auto it = schoolMap.begin(); it != schoolMap.end(); it++) {
  16.         string name = it->first;
  17.         string area = it->second;
  18.         if (name.size() < 2) continue;
  19.         string oppositeArea = name.substr(0, 2); // 对方学校所在学区的代码
  20.         if (oppositeArea == area) continue;
  21.         string oppositeName = oppositeArea + name.substr(2); // 对方学校的名称
  22.         if (schoolMap.count(oppositeName) && schoolMap[oppositeName] == oppositeArea) {
  23.             count++;
  24.         }
  25.     }

  26.     cout << count << endl;

  27.     return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-8 23:04:26 | 显示全部楼层
题目要求统计友好结对学校的数量,友好结对学校的定义是来自不同学区且校名前两个字母互为对方学校所在学区的代码。

我们可以使用哈希表来解决这个问题。遍历每个学校,对于每个学校,将其校名前两个字母与学区代码进行映射,并统计映射对的数量。

以下是基于C++的实现代码:
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <string>
  4. int main() {
  5.     int N;
  6.     std::cin >> N;
  7.     std::unordered_map<std::string, int> mapping;
  8.     int count = 0;
  9.     for (int i = 0; i < N; ++i) {
  10.         std::string school, district;
  11.         std::cin >> school >> district;
  12.         // 构造学区和学校名的映射键
  13.         std::string key1 = district + school.substr(0, 2);
  14.         std::string key2 = school.substr(0, 2) + district;
  15.         // 判断映射是否存在,如果存在则增加友好结对学校数量
  16.         if (mapping.count(key1)) {
  17.             count += mapping[key1];
  18.         }
  19.         if (mapping.count(key2)) {
  20.             count += mapping[key2];
  21.         }
  22.         // 更新映射表,增加对应键的计数
  23.         mapping[key1]++;
  24.     }
  25.     std::cout << count << std::endl;
  26.     return 0;
  27. }
复制代码

希望可以帮到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-10-8 23:38:34 | 显示全部楼层
本帖最后由 叼辣条闯世界 于 2023-10-9 21:06 编辑
Mike_python小 发表于 2023-10-8 23:04
题目要求统计友好结对学校的数量,友好结对学校的定义是来自不同学区且校名前两个字母互为对方学校所在学区 ...


输入:
3
XS SH
SH1 XS
SH2 XS

输出:3,不应该是2吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 05:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表