70分代码
#include<bits/stdc++.h>
using namespace std;
int n;
map<string,int> mp;
bool judge(string a)//判断是否合法
{
long long l=a.length();
long long ds=0,k=0,flag=0;//ds记录点的个数
int i;
for(i=0;i<l;i++)
{
if(a[i]=='.')
{
if(a[i-1]=='.')return 0;
flag=0;
ds++;
if(k>255)return 0;
k=0;
}
else if(a[i]==':')//当到冒号的时候退出循环
{
flag=0;
if(k>255)return 0;
k=0;
break;
}
else if(a[i]>='0' && a[i]<='9')
{
if(a[i]=='0' && k==0)flag=1;//flag=1时,如果还有数字,则存在前导零
else if(flag)return 0;//有前导零就退出
k=k*10+a[i]-'0';
}
else
{
return 0;
}
}
flag=0;
if(a[i]!=':')return 0;
if(ds!=3)return 0;
i++;
if(i>=l)return 0;
for(;i<l;i++)
{
if('0'<=a[i] && a[i]<='9')
{
if(a[i]=='0' && k==0)flag=1;
else if(flag) return 0;
k=k*10+a[i]-'0';
}
else
{
return 0;
}
}
if(k>65535)return 0;
return 1;
}
int main()
{
//freopen("wllj.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
string x,y;
cin>>x>>y;
if(!judge(y))
{
cout<<"ERR\n";
}
else
{
if(x=="Server")
{
if(!mp[y])
{
cout<<"OK\n";
mp[y]=i;
continue;
}
else
{
cout<<"FAIL\n";
continue;
}
}
else
{
if(!mp[y])
{
cout<<"FAIL\n";
}
else
{
cout<<mp[y]<<"\n";
}
}
}
}
return 0;
}