code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
map<string,int>server;
int a,b,c,d,e;
int n;
template<typename T>inline void read(T &x){
x=0;
int f=1;register char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
x*=f;
}template<typename T,typename ...Arr>inline void read(T &x,Arr &...arr){read(x);read(arr...);}
bool check(string a){
long long x=0;
int num=0;
bool flag=0,f=0,lastbd=0,rd=0;
//flag与f是判是否带前导0,lastbd是上一个是否为符号,rd是上一个是否读了数字
for(unsigned int i=0;i<a.length();i++){
// cout<<"now:"<<i<<"--"<<a[i]<<endl;
if(isdigit(a[i])){lastbd=0;rd=1;
if(flag==1&&a[i]=='0')f=1;
if(x==0&&a[i]=='0')flag=1;
x=x*10+a[i]-'0';
}else{
num++;
// cout<<"chech ok "<<" is num:"<<x<<" and now num:"<<num<<" flag"<<flag<<","<<f<<endl;
if(flag==1&&x!=0)return false;
if(f)return false;
if(!rd)return false;
if(num<=4){//192.168.0.1:088
if(x>255)return false;
}if(num>4){
if(x>65535)return false;
}if(a[i]=='.'){
if(lastbd)return false;
else lastbd=1;
if(num>=4)return false;
}if(a[i]==':'){
if(lastbd)return false;
else lastbd=1;
if(num<4)return false;
}flag=0,f=0;
x=0;rd=0;
}
}if(x!=0&&rd)num++;
if(x==0&&!rd)return false;
// cout<<"chech ok "<<" is num:"<<x<<" and now num:"<<num<<" flag"<<flag<<","<<f<<endl;
if(flag==1&&x!=0)return false;
if(f)return false;
if(num<=4){
if(x>255)return false;
}if(num>4){
if(x>65535)return false;
}if(num!=5)return false;
return true;
}int main(){
// freopen("network4.in","r",stdin);
// freopen("network.out","w",stdout);
read(n);
for(int i=1;i<=n;i++){
string a,str;
cin>>str>>a;
if(str=="Server"){
if(check(a)){
if(!server[a]){
printf("OK\n");
server[a]=i;
}else{
printf("FAIL\n");
}
}else printf("ERR\n");
}if(str=="Client"){
if(check(a)){
if(server[a]){
printf("%d\n",server[a]);
}else{
printf("FAIL\n");
}
}else printf("ERR\n");
}
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
蚌埠住了,求调