洛谷和小屠灵AC了,CCF75,求大佬指点
#include<bits/stdc++.h>
using namespace std;
map<string,int> m;
bool check(string s)
{
int sum=0,cnt=0;
bool pd=false;
for(int i=0;i<int(s.size());i++)
{
if(isdigit(s[i]))
{
if(i&&s[i-1]=='0'&&!sum) return false;
sum=sum*10+s[i]-'0';
pd=true;
if(cnt<4)
{if(sum>255) return false;}
else {if(sum>65535) return false;}
}
else
{
cnt++,sum=0;
if(!pd) return false;
if(i&&!isdigit(s[i-1])) return false;
if(cnt<4) {if(s[i]==':') return false;}
else if(cnt==4) {if(s[i]=='.') return false;}
else return false;
}
}
if(cnt<4) return false;
return true;
}
int main()
{
//freopen("network.in","r",stdin);
//freopen("network.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
string op,s;
cin>>op>>s;
if(!check(s))
{
puts("ERR");
continue;
}
if(op[0]=='S')
{
if(m[s]) puts("FAIL");
else {puts("OK");m[s]=i;}
}
else if(op[0]=='C')
{
if(m[s]) printf("%d\n",m[s]);
else puts("FAIL");
}
}
return 0;
}