这是80pts的程序
#include <bits/stdc++.h>
#define int long long
#define mm(a, b) memset(a, b, sizeof(a))
using namespace std;
int n, scnt = 0;
string server[1001];
int ccnt[1001];
string op, str;
bool judge(string s)
{
if (s.length() > 21 || s.length() < 9) return 0;
int idx = 0;
for (int i = 1; i <= 4; i++)
{
if (s[idx] >= '0' && s[idx] <= '9')
{
int num = 0; bool flag = false;
if (s[idx] == '0') flag = true;
while (s[idx] >= '0' && s[idx] <= '9' && idx < s.length()) { num = num * 10 + (s[idx] - '0'); idx++; }
if (flag && num != 0) return 0; if (num < 0 || num > 255) return 0;
}
else return 0;
if (idx == s.length()) return 0; if (s[idx] != '.' && i != 4) return 0; idx++;
}
idx--; if (idx == s.length() - 1) return 0; if (s[idx] != ':') return 0; idx++;
if (s[idx] >= '0' && s[idx] <= '9')
{
int num = 0; bool flag = false;
if (s[idx] == '0') flag = true;
while (s[idx] >= '0' && s[idx] <= '9' && idx < s.length()) { num = num * 10 + (s[idx] - '0'); idx++; }
if (flag && num != 0) return 0; if (idx != s.length()) return 0; if (num < 0 || num > 65535) return 0;
}
else return 0;
return 1;
}
bool Judge(string s)
{
if (scnt == 0) return 0;
for (int i = 1; i <= scnt; i++)
{
if (server[i] == s) return 1;
}
return 0;
}
void add_server(string s, int id)
{
scnt++;
server[scnt] = s;
ccnt[scnt] = id;
}
int find_server(string s)
{
for (int i = 1; i <= scnt; i++)
{
if (server[i] == s) return i;
}
return -1;
}
signed main()
{
freopen("network3.in", "r", stdin);
freopen("network3.out", "w", stdout);
mm(ccnt, 0);
scanf("%ld", &n);
for (int i = 1; i <= n; i++)
{
cin >> op >> str;
if (!judge(str)) printf("ERR\n");
else if (op[0] == 'S')
{
if (!Judge(str))
{
add_server(str, i);
printf("OK\n");
}
else printf("FAIL\n");
}
else
{
if (!Judge(str)) printf("FAIL\n");
else
{
int p = find_server(str);
printf("%d\n", ccnt[p]);
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
哪位大佬帮帮蒟蒻