警钟撅烂
查看原帖
警钟撅烂
1213524
C_plus_plus_12345楼主2024/11/27 22:23

注意看题目,题目有时候也会出错!

思路见下:

#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;
}
2024/11/27 22:23
加载中...