#include<bits/stdc++.h>
using namespace std;
map<string ,int> vis;
string op[1005],ad[1005];
int n;
int rec[10];
bool check(string s){
int len = s.size();
if(len<9) return false;
int cnt=0,cnt1=0,cnt2=0;
for(int i=0;i<len;i++){
if(cnt+1<=cnt1+cnt2) return false;
if(s[i]=='0'&&(i==0||(s[i-1]=='.'||s[i-1]==':')) && (s[i+1]!='.'&&s[i+1]!=':')) return false;
if(s[i]!='.' && s[i]!=':' && s[i]<'0' && s[i]>'9') return false;
if(s[i]=='.') cnt1++;
if(s[i]==':') cnt2++;
if(cnt1<3&&cnt2==1) return false;
if(s[i]=='.'&&s[i+1]=='.') return false;
}
if(cnt1!=3||cnt2!=1) return false;
memset(rec,0,sizeof(int)*10);
int j = 0;
for(int i=0;i<len;i++){
if(s[i]=='.'||s[i]==':') j++;
else rec[j] = rec[j]*10 + (s[i]-'0');
}
if (j != 4) return false;
for(int i=0;i<4;i++){
if(0>rec[i]||rec[i]>255) return false;
}
if(0>rec[4]||rec[4]>65535) return false;
return true;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>op[i]>>ad[i];
//cout<<op[i]<<" | "<<ad[i]<<endl;
}
for(int i=1;i<=n;i++){
if(op[i]=="Server"){
if(!check(ad[i])){
cout<<"ERR"<<endl;
}
else if(vis.find(ad[i])==vis.end()){
vis[ad[i]]=i;
cout<<"OK"<<endl;
}
else{
cout<<"FAIL"<<endl;
}
}
else{
if(!check(ad[i])){
cout<<"ERR"<<endl;
}
else if(vis.find(ad[i])==vis.end()){
cout<<"FAIL"<<endl;
}
else{
cout<<vis.find(ad[i])->second<<endl;
}
}
}
return 0;
}
原题
测试好久,快疯了