别人都是判少了,就我是判多了是吧。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
struct v{
bool right;
string name,place;
}a[1000000];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
a[i].right=true;
char s[1000000];
cin>>a[i].name;
gets(s);
int o=0,p=0,r=0,ans=0;
string t;
for(int j=1;j<strlen(s);j++){
t+=s[j];
if(s[j]=='.'){
o++;
if(s[j+1]=='.'||s[j+1]==':'){
a[i].right=false;
break;
}
if(o>3){
a[i].right=false;
break;
}
ans++;
if(ans>=1&&ans<=4){
if(r<0||r>255){
a[i].right=false;
break;
}
}
r=0;
if(s[j+1]=='0'&&s[j+2]<='9'&&s[j+2]>='0'){
a[i].right=false;
break;
}
}
else if(s[j]==':'){
p++;
if(s[j+1]=='.'||s[j+1]==':'){
a[i].right=false;
break;
}
if(o!=3){
a[i].right==false;
break;
}
if(p>1){
a[i].right=false;
break;
}
ans++;
if(ans>=1&&ans<=4){
if(r<0||r>255){
a[i].right=false;
break;
}
}
r=0;
if(s[j+1]=='0'&&s[j+2]<='9'&&s[j+2]>='0'){
a[i].right=false;
break;
}
}
else if(s[j]<='9'&&s[j]>='0'){
r*=10;
r+=s[j]-'0';
}
else{
a[i].right=false;
break;
}
}
if(a[i].right==false)continue;
a[i].place=t;
if(r<0||r>65535||ans<4||o<3||p<1||s[strlen(s)-1]=='.'||s[strlen(s)-1]==':')a[i].right=false;
else a[i].right=true;
}
for(int i=1;i<=n;i++){
if(a[i].right==false){
cout<<"ERR"<<endl;
continue;
}
if(a[i].name=="Server"){
int o=0;
for(int j=1;j<i;j++){
if(a[j].name=="Server"&&a[j].right==true&&a[i].place==a[j].place){
o=j;
break;
}
}
if(o==0)cout<<"OK"<<endl;
else cout<<"FAIL"<<endl;
}
if(a[i].name=="Client"){
int o=0;
for(int j=1;j<i;j++){
if(a[j].name=="Server"&&a[j].right==true&&a[i].place==a[j].place){
o=j;
break;
}
}
if(o!=0)cout<<o<<endl;
else cout<<"FAIL"<<endl;
}
}
return 0;
}