【华为】目录【华为】【参考文档】【数据重删】【参考文档】参考内容为塔子哥的机考题目首页 - CodeFun2000https://codefun2000.com/【数据重删】【题目内容】第1题-数据重删 - Problem Detail - CodeFun2000https://codefun2000.com/p/P2315题目的含义就是对数据的分割和计数【题目标签】哈希 字符分割 排序 模拟【题目分析】1.数据初始化,处理输入,vector的读入2.数据分块按照窗口大小分割注意左右边界学习stringstream流写法 转化成str()类型3.统计次数和首字母位置 构建两个哈希表4.构建结果集合 三元组tuple的语法熟悉5.格式化输出答案【题目答案】#include bits/stdc.h using namespace std; int main(){ //处理输入 int n, m; cin n m; vectorint a(n); for(int i 0; i n; i) cin a[i]; //处理按照窗口大小分割 注意左右边界和增加空格 stringstream语法输入 转化成str的数据类型再存入parts int left 0; vectorstring parts; while(left n){ int right min(left m - 1, n - 1); stringstream ss; for(int i left; i right; i){ if(i left) ss ; ss a[i]; } parts.push_back(ss.str()); left right 1; } //遍历整个数组 统计出现次数 标记起始位置方便后续记录答案 unordered_mapstring, int cnt; unordered_mapstring, int idx; for(int i 0; i parts.size(); i){ if(!cnt.count(parts[i])){ cnt[parts[i]] 1; idx[parts[i]] i; } else cnt[parts[i]]; } //整理成三元组 按照三元素的起始点idx并且sort排序 注意那个小括号的位置 vectortuplestring, int, int res; for(auto [key, value] : cnt ){ res.emplace_back(key, value, idx[key]); } sort(res.begin(), res.end(), [](const auto a, const auto b){ return get2(a) get2(b); }); //整理输出答案 string output; for(auto t : res){ string a get0(t); int b get1(t); output a to_string(b) ; } output.pop_back(); cout output endl; return 0; }