注意看题目,题目有时候也会出错!
思路见下:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
// 辅助函数,用于分割字符串
std::vector<std::string> split(const std::string& str, char delimiter)
{
std::vector<std::string> tokens;
std::string token;
std::istringstream tokenStream(str);
while (std::getline(tokenStream, token, delimiter))
{
tokens.push_back(token);
}
return tokens;
}
// 检查选手的目录结构是否严格匹配“X.zip/X/Y/Y.cpp”的格式
bool checkContestantStructureStrict(const std::string& contestantID, const std::string& problemName, const std::string& contestantPath)
{
std::string expectedPath = contestantID + ".zip/" + contestantID +
"/" + problemName + "/" + problemName + ".cpp";
if (contestantPath != expectedPath)
{
return false;
}
return true;
}
int main()
{
int n, m;
std::cin >> n >> m;
std::cin.ignore(); // 忽略换行符
std::vector<std::string> problemNames(m);
for (int i = 0; i < m; ++i)
{
std::getline(std::cin, problemNames[i]);
}
for (int i = 0; i < n; ++i)
{
std::string contestantID;
std::getline(std::cin, contestantID); // 读取考号
// 移除考号末尾的换行符(如果有的话)
if (!contestantID.empty() && contestantID.back() == '\n')
{
contestantID.pop_back();
}
std::vector<std::string> contestantPaths(m);
for (int j = 0; j < m; ++j)
{
std::getline(std::cin, contestantPaths[j]);
// 构造考号的.zip文件名,例如"X"变为"X.zip"
std::string contestantZipID = contestantID + ".zip"; // 看来RAR格式是不行了(
if (checkContestantStructureStrict(contestantZipID.substr(0, contestantZipID.size() - 4),
problemNames[j],
contestantPaths[j]))
{
std::cout << "正在提交……" << std::endl;
}
else
{
std::cout << "非法的目录结构。" << std::endl;
}
}
}
return 0;
}