牛客:HJ25 数据分类处理[华为机考][哈希][字符串]
学习要点
- 写代码时梳理好思路
- 写上注释
题目链接
数据分类处理_牛客题霸_牛客网
题目描述
解法:哈希+set
#include <bits/stdc++.h>
#include <complex>
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;int main() {// 先获得第一行int I_count;cin >> I_count;vector<string> v_str(I_count);for (int i = 0; i < I_count; i++) {cin >> v_str[i];}// 再获得第二行int R_count;cin >> R_count;vector<int> v_int(R_count);for (int i = 0; i < R_count; i++) {cin >> v_int[i];}// cout << endl;// for (auto& i : v_str) {// cout << i << ' ';// }// cout << endl;// for (auto& i : v_int) {// cout << i << ' ';// }// cout << endl;// 先处理Rset<int> s_int(v_int.begin(), v_int.end());// cout << endl;// for (auto& i : s_int) {// cout << i << ' ';// }// cout << endl;// 挂哈希桶unordered_map<int, vector<string>> index_map;for (auto& r_int : s_int) {for (int i = 0; i < I_count; i++) {int pos = v_str[i].find(to_string(r_int));if (pos != string::npos) {index_map[r_int].push_back(to_string(i));}}}// cout << endl;// for (auto& i : index_map) {// cout << i.first << ' ';// for(auto&j:i.second)// {// cout << j << " ";// }// cout << endl;// }// cout << endl;// 构建输出int real_R_count = index_map.size();// cout << real_R_count << endl;int O_count = 0;for (auto& i : index_map) {O_count += i.second.size() * 2;}// cout << O_count << endl;O_count += real_R_count * 2;// cout << O_count << endl;vector<string> O_str;O_str.push_back(to_string(O_count)); // 投入总数for (auto& r_int : s_int) {// 只处理有效Rif (index_map[r_int].size() != 0) {// 投入单规则O_str.push_back(to_string(r_int));// 投入单规则总数O_str.push_back(to_string(index_map[r_int].size()));// 投入后续数组for (int k = 0; k < index_map[r_int].size(); k++) {// 投入下标string t1;t1 += index_map[r_int][k];O_str.push_back(t1);// 投入元素O_str.push_back(v_str[stoi(index_map[r_int][k])]);}}}for (auto& i : O_str) {cout << i << ' ';}
}