【洛谷 AC ,CCF 75pts】
#include<bits/stdc++.h>
using namespace std;
const int ser=1,cli=2;
struct address{
int idx;
int type;
string s;
};
bool check(string s)
{
if(s[0]!='0') return true;
if(s.size()==1) return true;
return false;
}
bool is_ok(address add)
{
int sum=0,sum2=0;
if(!isdigit(add.s[add.s.size()-1]))
return false;
for(int i=0; add.s[i]; i++)
{
if(add.s[i]=='.')
{
if(i==0) return false;
if(add.s[i-1]<'0' || add.s[i-1]>'9')
return false;
sum++;
}
if(add.s[i]==':')
{
if(sum!=3) return false;
if(add.s[i-1]<'0' || add.s[i-1]>'9')
return false;
sum2++;
}
}
if(sum!=3 || sum2!=1) return false;
int i=0; int sa,sb,sc,sd,se;
sa=sb=sc=sd=se=0;
string a,b,c,d,e;
for(i; add.s[i]!='.'; i++)
a+=add.s[i]; i++;
for(i; add.s[i]!='.'; i++)
b+=add.s[i]; i++;
for(i; add.s[i]!='.'; i++)
c+=add.s[i]; i++;
for(i; add.s[i]!=':'; i++)
d+=add.s[i]; i++;
for(i; add.s[i]; i++)
e+=add.s[i];
for(i=0; a[i]; i++)
sa=sa*10+a[i]-'0';
for(i=0; b[i]; i++)
sb=sb*10+b[i]-'0';
for(i=0; c[i]; i++)
sc=sc*10+c[i]-'0';
for(i=0; d[i]; i++)
sd=sd*10+d[i]-'0';
for(i=0; e[i]; i++)
se=se*10+e[i]-'0';
if(check(a)&&check(b)&&check(c)&&check(d)&&check(e)&&sa>=0&&sa<=255&&sb>=0&&sb<=255&&sc>=0&&sc<=255&&sd>=0&&sd<=255&&se>=0&&se<=65535)
return true;
return false;
}
address arr[1005];
int n;
int main()
{
// freopen("network.in","r",stdin);
// freopen("network.out","w",stdout);
cin>>n;
for(int i=0; i<n; i++)
{
string sss1,sss2;
cin>>sss1>>sss2;
if(sss1=="Server") arr[i].type=ser;
else arr[i].type=cli;
arr[i].s = sss2;
}
for(int i=0; i<n; i++)
{
if(arr[i].type==ser)
{
if(!is_ok(arr[i]))
{
cout<<"ERR\n";
goto END;
}
for(int j=0; j<i; j++)
{
if(arr[i].s == arr[j].s && arr[i].type == arr[j].type)
{
cout<<"FAIL\n";
goto END;
}
}
cout<<"OK\n";
goto END;
}
else
{
if(!is_ok(arr[i]))
{
cout<<"ERR\n";
goto END;
}
for(int j=0; j<i; j++)
{
if(arr[i].s == arr[j].s && arr[i].type != arr[j].type)
{
cout<<j+1<<'\n';
goto END;
}
}
cout<<"FAIL\n";
goto END;
}
END:
continue;
}
return 0;
}
/*
5
Server 192.168.1.1:8080
Server 192.168.1.1:8080
Client 192.168.1.1:8080
Client 192.168.1.1:80
Client 192.168.1.1:99999
*/