#include using namespace std; int w[5]; // 分解数组 bool check(string addr) { memset(w, -1, sizeof w); sscanf(addr.c_str(), "%d.%d.%d.%d:%d", &w[0], &w[1], &w[2], &w[3], &w[4]); // ① 按指定格式扫入变量 // 干掉胡乱输入的,比如 33.3423.23423ASFDSDF.sdfsdf char str[100]; sprintf(str, "%d.%d.%d.%d:%d", w[0], w[1], w[2], w[3], w[4]); // ② 将变量还原拼接成字符串 if (str != addr) return false; // 字符数组可以直接与string对比! for (int i = 0; i < 5; i++) { if (w[i] < 0) return false; if (i < 4 && w[i] > 255) return false; if (i == 4 && w[i] > 65535) return false; } return true; } int main() { int n; cin >> n; unordered_map hash; for (int i = 1; i <= n; i++) { string type, addr; cin >> type >> addr; if (type == "Server") { if (!check(addr)) puts("ERR"); else if (hash.count(addr)) puts("FAIL"); else { hash[addr] = i; puts("OK"); } } else { if (!check(addr)) puts("ERR"); else if (!hash.count(addr)) puts("FAIL"); else cout << hash[addr] << endl; } } return 0; }