只对了第一个点和hack,有的时候他会输出ERR
#include<bits/stdc++.h>
using namespace std;
string q[8005];
int a[8005];
int lenth=1;
bool check(string s){
int mh=0,point=0,a[5],l=0;
memset(a,0,sizeof(a));
for(int i=0;i<s.size();){
while(isdigit(s[i])){
if(s[i]=='0' && a[l]==0)return false;
a[l]=a[l]*10+(s[i]-'0');
if(l<=3 && a[l]>255)return false;
if(l==4 && a[4]>65535)return false;
i++;
}
l++;
if(s[i]!='.' && l<=3)return false;
if(s[i]!=':' && l==4)return false;
if(!isdigit(s[i+1]) && l<4)return false;
if(l>5)return false;
i++;
}
return true;
}
int main(){
//freopen("network.in","r",stdin);
//freopen("network.out","w",stdout);
int n;
scanf("%d",&n);
string op,pl;
for(int i=1;i<=n;i++){
cin>>op>>pl;
if(check(pl)){
if(op=="Server"){
bool flag=false;
for(int f=1;f<=lenth-1;f++){
if(pl==q[f]){
printf("FAIL\n");
flag=true;
}
}
if(!flag){
printf("OK\n");
q[lenth]=pl;
a[lenth]=i;
lenth++;
}
}else{
bool flg=false;
for(int f=1;f<lenth;f++){
if(pl==q[f]){
printf("%d\n",a[f]);
flg=true;
break;
}
}
if(!flg)printf("FAIL\n");
}
}else printf("ERR\n");
}
return 0;
}