蜜汁RE
查看原帖
蜜汁RE
291358
Micro_Seven楼主2020/7/16 14:08

RT\huge{RT}

#include <bits/stdc++.h>
using namespace std;

class File;
class Data;
class Problem_Datas;

class File
{
public:
    enum Format
    {
        MIE, //<main_name><id>.<ext_name>
        MEI  //<main_name>.<ext_name><id>
    };

    unsigned long id;
    string main_name, ext_name;
    Format format;

public:
    File() = default;
    File(string name) :
    id(stoul(string(name.begin() + name.find_first_of("0123456789"), name.begin() + name.find_last_of("0123456789") + 1))),
    main_name(string(name.begin(), name.begin() + name.find("."))), ext_name(string(name.begin() + name.find(".") + 1, name.end())),
    format(name.find_first_of("1234567890") < name.find(".") ? MIE : MEI)
    {
        string::size_type pos = ext_name.find_first_of("01234567890");

        if(pos != string::npos)
            ext_name.erase(ext_name.begin() + pos, ext_name.end());
    }

    inline string name() const
    {
        switch(format)
        {
            case MIE:
                return main_name + to_string(id) + "." + ext_name;
            case MEI:
                return main_name + "." + ext_name + to_string(id);
        }
    }

    inline void set_id(unsigned id) { this->id = id; }
};

class Data
{
public:
    File iFile, oFile;

    Data() = default;
    Data(string iFileName, string oFileName) : iFile(iFileName), oFile(oFileName) {}
    Data(File iFile, File oFile) : iFile(iFile), oFile(oFile) {}
};

class Problem_Datas
{
public:
    vector<Data> datas;

    inline void set_first_data_id(unsigned id)
    {
        for(auto &r:datas)
        {
            r.iFile.set_id(id);
            r.oFile.set_id(id);

            ++id;
        }
    }
};

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    string str;

    Problem_Datas datas;
    getline(cin, str);

    switch(str.find(" "))
    {
        case string::npos:
        {
            unsigned long first_data_id(stoul(str));

            while(!cin.eof())
            {
                string iFileName, oFileName;
                cin >> iFileName >> oFileName;

                datas.datas.push_back(Data(iFileName, oFileName));
            }

            datas.set_first_data_id(first_data_id);

            for(auto r:datas.datas)
                cout << r.iFile.name() << " " << r.oFile.name() << "\n";
            break;
        }
        default:
        {
            {
                istringstream iss(str);

                string iFileName, ext_name;
                iss >> iFileName >> ext_name;

                datas.datas.push_back(Data(iFileName, File()));

                datas.datas[0].oFile.main_name = datas.datas[0].iFile.main_name;
                datas.datas[0].oFile.ext_name = ext_name;
            }

            unsigned long n(datas.datas[0].iFile.id);
            while(!cin.eof())
            {
                string iFileName, oFileName;
                cin >> iFileName >> oFileName;

                Data data(iFileName, oFileName);

                // datas.datas.push_back(Data());

                data.iFile.main_name = datas.datas[0].iFile.main_name;
                data.oFile.main_name = datas.datas[0].oFile.main_name;

                data.iFile.main_name.erase(data.iFile.main_name.end() - 1); //
                data.oFile.main_name.erase(data.oFile.main_name.end() - 1); //

                data.iFile.ext_name = datas.datas[0].iFile.ext_name;
                data.oFile.ext_name = datas.datas[0].oFile.ext_name;

                data.iFile.id = n;
                data.oFile.id = n;

                cout << data.iFile.name() << " " << data.oFile.name() << "\n";

                ++n;
            }
        }
    }

    return 0;
}
2020/7/16 14:08
加载中...