不知道怎么解决前导零,加了自己瞎想的解决方案,就只有五分了,否则65分
#include<iostream>
#include<unordered_map>
using namespace std;
unordered_map<string,int> address;
const string ans="1.1.1.1:1";
bool IsNumber(char ch)
{
return (ch>='0'&&ch<='9');
}
//1 Server 192.168.0.255:80
bool check1(string adr)
{
int l=adr.length();
long long sum=0;
for(int i=0;i<l;i++)
{
if(adr[i]=='-') return false;
if(IsNumber(adr[i]))
{
long long num=adr[i]-'0';
// cout<< endl <<"testnum:" << adr[i]-'0'<<endl;
sum=sum*10+num;
// cout << endl << "test:" << sum << endl;
}
if(i==l-1)
{
// cout << endl << "test:" << sum << endl;
if(sum>65535)
return false;
}
else
{
if(!IsNumber(adr[i+1]))
{
// cout << endl << "test:" << sum << endl;
if(sum>255)
return false;
sum=0;
}
}
}
// cout << "[]";
return true;
}
bool check2(string adr)
{
// cout << "test:" << adr << endl;
//a.b.c.d:e
int l=adr.length();
string res="";
for(int i=0;i<l;i++)
{
if(i==0&&adr[i]=='0')
return false;
if(i>=1)
if((adr[i]=='0')&&(adr[i-1]=='.'||adr[i-1]==':'))
return false;
if(!IsNumber(adr[i]))
res+=adr[i];
else
{
if(i==l-1)
res+="1";
else
{
if(!IsNumber(adr[i+1]))
res+="1";
}
}
}
// cout <<endl << "test:"<< res<<endl;
return (res==ans);
}
bool check(string adr)
{
return check1(adr)&&check2(adr);
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
string typ,adr;
cin >> typ;
cin >> adr;
if(!check(adr))
{
printf("ERR\n");
continue;
}
if(typ=="Server")
{
if(address.count(adr)==1)
{
printf("FAIL\n");
continue;
}
address[adr]=i;
printf("OK\n");
}
else
{
if(address.count(adr)==1)
printf("%d\n",address[adr]);
else
printf("FAIL\n");
}
}
return 0;
}