这是赛时代码,就是不知道哪错了?
哪位好心人帮我康一康。
#include <bits/stdc++.h>
using namespace std;
int n;
string opt, check_str = "...:", str;
map<string, int> mp;
int check(string s) {
int cnt = 0;
int len = s.size();
if (!(s[len - 2] >= '0' && s[len - 2] <= '9')) {
return 0;
}
for (int i = 0; i < len; i++) {
if (s[i] == ':' || s[i] == '.') {
if (s[i] != check_str[cnt])
return 0;
if (s[i] == check_str[cnt] && !(s[i - 1] >= '0' && s[i - 1] <= '9'))
return 0;
else cnt++;
}
}
for (int i = 0; i < len; i++) {
if (s[i] == '0' && (s[i + 1] >= '0' && s[i + 1] <= '9') && (s[i - 1] == '.' || s[i - 1] == ':' || i == 0)) {
return 0;
}
}
int ans, numd = 0;
for (int i = 0; i < len; i++) {
if (s[i] >= '0' && s[i] <= '9') {
numd++;
ans = 0;
int k = i;
while(s[k] >= '0' && s[k] <= '9') {
ans = ans * 10 + (s[k] - '0');
k++;
}
if (numd >= 1 && numd <= 4) {
if (ans > 255) return 0;
} else if (numd == 5) {
if (ans > 65535) return 0;
}
i = k - 1;
}
}
return 1;
}
int main() {
/* freopen("network.in", "r", stdin);
freopen("network.out", "w", stdout);*/
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> opt;
if (opt == "Server") {
cin >> str;
if (!check(str)) {
cout << "ERR\n";
} else if (mp[str]) {
cout << "FAIL\n";
} else {
mp[str] = i;
cout << "OK\n";
}
} else if (opt == "Client") {
cin >> str;
if (!check(str)) {
cout << "ERR\n";
} else if (mp[str]) {
cout << mp[str] << endl;
} else cout << "FAIL\n";
}
}
return 0;
}