当前位置 博文首页 > fareast_mzh的博客:HJ25 数据分类处理

    fareast_mzh的博客:HJ25 数据分类处理

    作者:[db:作者] 时间:2021-08-13 15:52

    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
    下一篇:没有了