为毛洛谷和小图灵都测了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;
}