RT 代码如下
#include<iostream>
#include<fstream>
#include<string.h>
#include<map>
#include<algorithm>
using namespace std;
int n;
string kind,save,num,str;
char s;
map<string,int> cc;
bool abcd(string f)
{
if(f.size()<=2&&f>="0") return true;
if(f<="255"&&f.size()==3) return true;
return false;
}
bool e(string f)
{
if(f.size()<=4&&f>="0") return true;
if(f<="65535"&&f.size()==5) return true;
return false;
}
int ERR()
{
cin>>str;
int i=0;
num="";
while(str[i]>='0'&&str[i]<='9')
num=num+str[i],i++;
if(num[0]=='0'&&num.size()!=1)
{
return -1;
}
if(abcd(num)==false)
{
return -1;
}
save=save+num;
s=str[i];
if(s!='.')
{
return -1;
}
save=save+s;
i++;
num="";
while(str[i]>='0'&&str[i]<='9')
num=num+str[i],i++;
if(num[0]=='0'&&num.size()!=1)
{
return -1;
}
if(abcd(num)==false)
{
return -1;
}
save=save+num;
s=str[i];
if(s!='.')
{
return -1;
}
save=save+s;
i++;
num="";
while(str[i]>='0'&&str[i]<='9')
num=num+str[i],i++;
if(num[0]=='0'&&num.size()!=1)
{
return -1;
}
if(abcd(num)==false)
{
return -1;
}
save=save+num;
s=str[i];
if(s!='.')
{
return -1;
}
save=save+s;
i++;
num="";
while(str[i]>='0'&&str[i]<='9')
num=num+str[i],i++;
if(num[0]=='0'&&num.size()!=1)
{
return -1;
}
if(abcd(num)==false)
{
return -1;
}
save=save+num;
s=str[i];
if(s!=':')
{
return -1;
}
save=save+s;
i++;
num="";
while(str[i]>='0'&&str[i]<='9'&&i<=str.size()-1)
num=num+str[i],i++;
if(num[0]=='0'&&num.size()!=1)
{
return -1;
}
if(e(num)==false)
{
return -1;
}
save=save+num;
if(i!=str.size())
{
return -1;
}
}
int FAILS(int w)
{
if(cc[save]!=0) return -1;
else
cc[save]=w;
}
int FAILC()
{
if(cc[save]==0) return -1;
}
int main()
{
//freopen("network3.in","r",stdin);
//freopen("network3.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>kind;
save="";
if(kind=="Server")
{
if(ERR()==-1)
{
cout<<"ERR"<<endl;
continue;
}
if(FAILS(i)==-1)
{
cout<<"FAIL"<<endl;
continue;
}
cout<<"OK"<<endl;
}
if(kind=="Client")
{
if(ERR()==-1)
{
cout<<"ERR"<<endl;
continue;
}
if(FAILC()==-1)
{
cout<<"FAIL"<<endl;
continue;
}
cout<<cc[save]<<endl;
}
}
return 0;
}