当前位置 博文首页 > fareast_mzh的博客:HJ25 数据分类处理
https://www.nowcoder.com/ta/huawei (HJ25)
CMakeLists.txt
cmake_minimum_required(VERSION 3.19)
project(huawei)
set(CMAKE_CXX_STANDARD 14)
add_executable(huawei main.cpp HJ25.cpp HJ25.h)
HJ25.h
//
// Created by mingz on 8/7/2021.
//
#ifndef HUAWEI_HJ25_H
#define HUAWEI_HJ25_H
#include <iostream>
#include <set>
#include <map>
#include <vector>
using std::istream;
using std::ostream;
class HJ25 {
private:
static const size_t STR_BUFF_SIZE = 20;
public:
static void input(std::istream& sIn, int iCnt, std::vector<std::string>& vSeq, std::set<int>& sRi);
static void output(std::ostream& sOut, std::map< int, std::vector<size_t> >& mAll, std::vector<std::string>& vSeq);
static void main(std::istream& in, std::ostream& out);
};
#endif //HUAWEI_HJ25_H
HJ25.cpp
//
// Created by mingz on 8/7/2021.
// https://www.nowcoder.com/ta/huawei (HJ25)
//
#include "HJ25.h"
#include "cstring"
void HJ25::input(std::istream &sIn, int iCnt, std::vector<std::string> &vSeq, std::set<int> &sRi) {
std::string strTmp;
int i = 0;
for (; i < iCnt; i++) {
sIn >> strTmp;
vSeq.push_back(strTmp);
}
sIn >> iCnt;
int iTmp;
for (i = 0; i < iCnt; i++) {
sIn >> iTmp;
sRi.insert(iTmp);
}
}
void HJ25::output(std::ostream &sOut, std::map<int, std::vector<size_t>> &mAll,
std::vector<std::string> &vSeq) {
size_t iAll = mAll.size() * 2;
// std::map< int, std::vector<int> >::iterator
// for (auto it = mAll.begin(); it != mAll.end(); ++it) {
for (auto &it : mAll) {
iAll += it.second.size() * 2;
}
sOut << iAll << " ";
for (auto & it : mAll) {
sOut << it.first << " " << it.second.size() << " ";
for (size_t e : it.second) {
sOut << e << " " << vSeq[e] << " ";
}
}
sOut << std::endl;
}
void HJ25::main(std::istream& in, std::ostream& out) {
int iCnt;
std::vector<std::string> vSeq; // string to find str
std::set<int> sRi; // set default order by asc
std::map< int, std::vector<size_t> > mAll;
char buf[HJ25::STR_BUFF_SIZE] = {0};
while (in >> iCnt) {
input(in, iCnt, vSeq, sRi);
for (auto& ri : sRi) {
for (size_t i = 0; i < vSeq.size(); i += 1) {
memset(buf, 0, HJ25::STR_BUFF_SIZE);
::sprintf(buf, "%d", ri);
if (std::string::npos != vSeq.at(i).find(buf)) {
mAll[ri].push_back(i);
}
}
}
output(out, mAll, vSeq);
}
}
main.cpp
#include <iostream>
#include <fstream>
#include "HJ25.h"
int main() {
std::ifstream inFile("../input/hj25.txt");
if (!inFile.is_open()) {
std::cout << "Open file failed." << std::endl;
return 2;
}
// std::string line;
// while (std::getline(inFile, line)) {
// std::cout << line << std::endl;
// }
HJ25::main(inFile, std::cout);
// std::ofstream oFile("../output/hj25.out.txt");
// HJ25::main(inFile, oFile);
// oFile.close();
inFile.close();
return 0;
}
input/hj25.txt
15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 123
5 6 3 6 3 0
?
?
cs