管理员删帖
本帖最后由 叼辣条闯世界 于 2023-10-9 22:04 编辑10.9更:自己过了
管理员删帖 这道题可以用一个哈希表来存储每个学校所在学区的代码,然后遍历每个学校,检查是否存在一个学校的前两个字母与当前学校所在学区的代码相同,且当前学校的前两个字母与另一个学校所在学区的代码相同。如果存在,则说明这两个学校是友好结对学校。
以下是示例代码:
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
unordered_map<string, string> schoolMap; // 哈希表存储每个学校所在学区的代码
for (int i = 0; i < n; i++) {
string name, area;
cin >> name >> area;
schoolMap = area;
}
int count = 0;
for (auto it = schoolMap.begin(); it != schoolMap.end(); it++) {
string name = it->first;
string area = it->second;
if (name.size() < 2) continue;
string oppositeArea = name.substr(0, 2); // 对方学校所在学区的代码
if (oppositeArea == area) continue;
string oppositeName = oppositeArea + name.substr(2); // 对方学校的名称
if (schoolMap.count(oppositeName) && schoolMap == oppositeArea) {
count++;
}
}
cout << count << endl;
return 0;
}
题目要求统计友好结对学校的数量,友好结对学校的定义是来自不同学区且校名前两个字母互为对方学校所在学区的代码。
我们可以使用哈希表来解决这个问题。遍历每个学校,对于每个学校,将其校名前两个字母与学区代码进行映射,并统计映射对的数量。
以下是基于C++的实现代码:
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
int N;
std::cin >> N;
std::unordered_map<std::string, int> mapping;
int count = 0;
for (int i = 0; i < N; ++i) {
std::string school, district;
std::cin >> school >> district;
// 构造学区和学校名的映射键
std::string key1 = district + school.substr(0, 2);
std::string key2 = school.substr(0, 2) + district;
// 判断映射是否存在,如果存在则增加友好结对学校数量
if (mapping.count(key1)) {
count += mapping;
}
if (mapping.count(key2)) {
count += mapping;
}
// 更新映射表,增加对应键的计数
mapping++;
}
std::cout << count << std::endl;
return 0;
}
希望可以帮到你!如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} 本帖最后由 叼辣条闯世界 于 2023-10-9 21:06 编辑
Mike_python小 发表于 2023-10-8 23:04
题目要求统计友好结对学校的数量,友好结对学校的定义是来自不同学区且校名前两个字母互为对方学校所在学区 ...
输入:
3
XS SH
SH1 XS
SH2 XS
输出:3,不应该是2吗?
页:
[1]