虽然本人没有参加今年 ,但是有幸参加了 (挂得很惨)
所以本蒟蒻就来 组水篇题解了。
本题不难,按照题意模拟即可。
大致思路就是:
读入类型()与 。
判断 是否合法:如果不合法,输出 并 continue
,否则继续。
如果类型是 ,则在已连接的 中查询是否已存在本次需要建立的连接,如果是,则输出 ,否则输出 ;
如果类型是 ,则在已连接的 中查询是否已存在本次需要加入的连接,如果是,则输出对应的 的编号,否则输出 。
对于在已建立的连接中进行查询的操作,使用 unordered_map<string, int>
来维护即可(具体实现见代码)。
对于判断 是否合法的方法,由于本人太菜,只能单独对每种不合法的情况进行判断:
- 的第 个字符不为数字;
- 的第 个字符为 ,且第 个字符为数字;
- 的最后 个字符不为数字;
- 中“
:
”之前的“.
”的个数不足 个;
- 中“
.
”的个数不为 个;
- 中“
:
”的个数不为 个;
- 中某个“
.
”之后的第 个字符不为数字;
- 中某个“
.
”之后的第 个字符为 ,且第 个字符为数字;
- 中“
:
”之后的第 个字符不为数字;
- 中“
:
”之后的第 个字符为 ,且第 个字符为数字;
- 包含除数字,“
.
”与“:
”之外的字符;
- 中某个数字超出范围。
希望这篇题解对你有帮助!_(:3」∠)_
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| #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; }
|