代码:
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, int> ha;
char op[9];
string ip;
inline bool valid(string &ip) {
long long a = 0, b = 0, c = 0, d = 0, e = 0, len = ip.length(), c1 = 0, c2 = 0;
if (ip[0] < '0' || ip[0] > '9') {
return false;
}
if (ip[0] == '0' && ip[1] >= '0' && ip[1] <= '9') {
return false;
}
if (ip[len - 1] < '0' || ip[len - 1] > '9') {
return false;
}
for (int i = 0; i < len; i++) {
if (ip[i] >= '0' && ip[i] <= '9') {
if (c1 < 3 && c2) {
return false;
}
if (c1 == 0) {
a *= 10;
a += ip[i] - '0';
} else if (c1 == 1) {
b *= 10;
b += ip[i] - '0';
} else if (c1 == 2) {
c *= 10;
c += ip[i] - '0';
} else if (c1 == 3) {
if (c2 == 0) {
d *= 10;
d += ip[i] - '0';
} else if (c2 == 1) {
e *= 10;
e += ip[i] - '0';
} else {
return false;
}
} else {
return false;
}
} else if (ip[i] == '.') {
c1++;
if (ip[i + 1] < '0' || ip[i + 1] > '9') {
return false;
}
if (i < len - 2 && ip[i + 1] == '0' && ip[i + 2] >= '0' && ip[i + 2] <= '9') {
return false;
}
} else if (ip[i] == ':') {
c2++;
if (ip[i + 1] < '0' || ip[i + 1] > '9') {
return false;
}
if (i < len - 2 && ip[i + 1] == '0' && ip[i + 2] >= '0' && ip[i + 2] <= '9') {
return false;
}
} else {
return false;
}
}
return a >= 0 && a <= 255 && b >= 0 && b <= 255 && c >= 0 && c <= 255 && d >= 0 && d <= 255 && e >= 0 && e <= 65535 && c1 == 3 && c2 == 1;
}
int n;
int main() {
freopen("network.in", "r", stdin);
freopen("network.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%s", op);
cin >> ip;
if (!valid(ip)) {
puts("ERR");
continue;
}
if (op[0] == 'S') {
if (!ha.count(ip)) {
ha[ip] = i;
puts("OK");
} else {
puts("FAIL");
}
} else {
if (ha.count(ip)) {
printf("%d\n", ha[ip]);
} else {
puts("FAIL");
}
}
}
return 0;
}