AC Code
[C++] 纯文本查看 复制代码 #include <iostream>#include <cstdio>
#include <cmath>
#include <map>
#include <cstring>
#include <string>
using namespace std;
map<string, int> m;
int main() {
int n;
scanf("%d", &n);
for (int k = 0; k < n; k++) {
string t, a;
cin >> t >> a;
if (a.length() < 10) {
printf("ERR\n");
break;
}
int j = 0;
int addr[5];
memset(addr, 0, sizeof addr);
if (a[j] == '.' || (a[j] == '0' && isdigit(a[j + 1]))) {
printf("ERR\n");
continue;
}
while (j < a.length() && a[j] != '.') {
addr[0] = addr[0] * 10 + a[j] - '0';
j++;
}
j++;
if (j < a.length() && a[j] == '.' || (a[j] == '0' && isdigit(a[j + 1]))) {
printf("ERR\n");
continue;
}
while (j < a.length() && a[j] != '.') {
addr[1] = addr[1] * 10 + a[j] - '0';
j++;
}
j++;
if (j < a.length() && a[j] == '.' || (a[j] == '0' && isdigit(a[j + 1]))) {
printf("ERR\n");
continue;
}
while (j < a.length() && a[j] != '.') {
addr[2] = addr[2] * 10 + a[j] - '0';
j++;
}
j++;
if (j < a.length() && a[j] == '.' || (a[j] == '0' && isdigit(a[j + 1]))) {
printf("ERR\n");
continue;
}
while (j < a.length() && a[j] != ':') {
addr[3] = addr[3] * 10 + a[j] - '0';
j++;
}
j++;
if (j < a.length() && (a[j] == '.' || (a[j] == '0' && j + 1 < a.length() && isdigit(a[j + 1])))) {
printf("ERR\n");
continue;
}
bool flag = false;
while (j < a.length()) {
if (!isdigit(a[j])) {
printf("ERR\n");
break;
}
addr[4] = addr[4] * 10 + a[j] - '0';
j++;
}
if (flag) continue;
for (int i = 0; i < 4; i++) {
if (!(addr[i] >= 0 && addr[i] <= 255)) {
printf("ERR\n");
flag = true;
break;
}
}
if (flag) continue;
if (!(addr[4] >= 0 && addr[4] <= 65535)) {
printf("ERR\n");
continue;
}
int cnt = m.count(a);
if (t == "Server") {
if (cnt) {
printf("FAIL\n");
continue;
}
else {
m[a] = k + 1;
printf("OK\n");
continue;
}
}
else if (t == "Client") {
if (cnt) {
printf("%d\n", m[a]);
}
else {
printf("FAIL\n");
}
}
}
return 0;
}
忘记在考场上是怎么写的了,于是我又写了一遍~
代码写得有点乱,不过顺利通过了
|