You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <bits/stdc++.h>
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<string, int> 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;
}