关于J组第三题
  • 板块灌水区
  • 楼主muvum
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/10/31 10:37
  • 上次更新2023/11/4 01:46:07
查看原帖
关于J组第三题
235696
muvum楼主2021/10/31 10:37

为毛洛谷和小图灵都测了100成绩但实际只有65,有大佬查错吗?

#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>

std::map<std::string, int> severID;

int n;

bool is_illegal(std::string s) {
	int len = s.length();
	int cnt = 0;
	std::string chars = "";
	for (int i=0; i<len; ++i) {
		char c = s[i];
		if (c == '.' || c == ':') chars += c;
		if (c == '-') return true;
		else if (c >= '0' && c <= '9') {
			cnt++;
			std::string t = "";
			for (int j=i; s[j]>='0'&&s[j]<='9'; j++) t += s[j];
			int num = 0; sscanf(&s[i], "%d", &num);
			if (cnt <= 4 && num > 255) return true;
			if (cnt == 5 && num > 65535) return true;
			if (cnt > 5) return true;
			if (num != 0 && t[0] == '0') return true;
			if (num == 0 && t.length() != 1) return true;
			i += t.length() - 1;
		}
	}
	if (chars != "...:") return true;
	if (cnt < 5) return true;
	return false;
}

int main() {
	freopen("network.in", "r", stdin);
	freopen("network.out", "w", stdout);
	std::ios::sync_with_stdio(false);
	std::cin >> n;
	for (int i=1; i<=n; ++i) {
		std::string s1, s2; std::cin >> s1 >> s2;
		if (is_illegal(s2)){
			std::cout << "ERR\n"; continue;
		}
		if (s1[0] == 'S') {
			if (severID.count(s2)) std::cout << "FAIL\n";
			else { severID[s2] = i; std::cout << "OK\n"; }
		}
		else {
			if (!severID.count(s2)) std::cout << "FAIL\n";
			else std::cout << severID[s2] << '\n';
		}
	}
	return 0;
}
2021/10/31 10:37
加载中...