样例全过
下了几个数据点,和输出是一模一样的,但还是0分...... 蒟蒻求调
#include <bits/stdc++.h>
using namespace std;
int n;
struct node{
string s;
bool o;
};
node ad[1005];
bool numb(char c){
return c>='0'&&c<='9';
}
bool legal(string s){
int len=s.length();
int weia=0,weib=0,weic=0,weid=0,weie=0;
int a=0,b=0,c=0,d=0,e=0;
for(int i=0;;i++){
if(numb(s[i]))weia++;
else break;
}if(weia>1&&s[0]=='0')return false;
for(int i=weia;i>=1;i--)a+=(s[weia-i]-'0')*pow(10,i-1);
if(a>255)return false;
if(s[weia]!='.'||!(numb(s[weia+1])))return false;
for(int i=weia+1;;i++){
if(numb(s[i]))weib++;
else break;
}if(weib>1&&s[weia+1]=='0')return false;
int weibb=weib;
for(int i=weia+1;i<=weia+weib;i++){
b+=(s[i]-'0')*pow(10,weibb-1);
weibb--;
}if(b>255)return false;
if(s[weia+weib+1]!='.'||!(numb(s[weia+weib+2])))return false;
for(int i=weia+weib+2;;i++){
if(numb(s[i]))weic++;
else break;
}if(weic>1&&s[weia+weib+2]=='0')return false;
int weicc=weic;
for(int i=weia+weib+2;i<=weia+weib+weic+2;i++){
c+=(s[i]-'0')*pow(10,weicc-1);
weicc--;
}if(c>255)return false;
if(s[weia+weib+weic+2]!='.'||!(numb(s[weia+weib+weic+3]))){
return false;
}for(int i=weia+weib+weic+3;;i++){
if(numb(s[i]))weid++;
else break;
}if(weid>1&&s[weia+weib+weic+3]=='0')return false;
int weidd=weid;
for(int i=weia+weib+weic+3;i<=weia+weib+weic+weid+3;i++){
d+=(s[i]-'0')*pow(10,weidd-1);
weidd--;
}if(d>255)return false;
if(s[weia+weib+weic+weid+3]!=':'||!(numb(s[weia+weib+weic+weid+4]))){
return false;
}int weiwei=weia+weib+weic+weid+4;
weie=len-weiwei;
if(weie>1&&s[weiwei]=='0')return false;
int weiee=weie;
for(int i=weiwei;i<=len-1;i++){
e+=(s[i]-'0')*pow(10,weiee-1);
weiee--;
}if(e>65535)return false;
return true;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
string op;
cin>>op>>ad[i].s;
if(!legal(ad[i].s)){
cout<<"ERR"<<endl;
continue;
}if(op=="Server"){
ad[i].o=1;
bool f=0;
for(int j=1;j<i;j++){
if(ad[j].s==ad[i].s&&ad[j].o==1)f=1;
}if(f){
cout<<"Fail"<<endl;
continue;
}cout<<"OK"<<endl;
continue;
}else if(op=="Client"){
ad[i].o=0;
bool f=0;
for(int j=1;j<i;j++){
if(ad[j].s==ad[i].s&&ad[j].o==1){
cout<<j<<endl;
f=1;
break;
}
}if(!f)cout<<"Fail"<<endl;
continue;
}
}
return 0;
}