RT,各位看这样写对嘛
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
int t,a[15],se,cl,oo;
char server[1005][1005];
char all[1005][1005],p[1005];
char s[1005],soc[25];
int main() {
scanf("%d",&t);
while(t--) {
scanf("%s %s",soc+1,s+1); int n=strlen(s+1);
++oo;
for(int i=1;i<=n;i++) all[oo][i]=s[i];
p[oo]=soc[1];
int dian=0,mao=0;
for(int i=1;i<=n;i++) {
if(s[i]=='.') dian++;
else if(s[i]==':') mao++;
}
if(dian!=3&&mao!=1) {
printf("ERR\n");
continue;
}
bool can=true; bool flag=true;
int oppo=0,k=0;
for(int i=1;i<=n;i++) {
if(s[i]=='.'||s[i]==':') {
a[++k]=oppo;
oppo=0; can=true;
}
if(s[i]>='0'&&s[i]<='9') {
if(s[i]=='0'&&(s[i+1]>='0'&&s[i+1]<='9')&&can) flag=false;
else can=false;
oppo=oppo*10+(s[i]-'0');
}
}
a[++k]=oppo;
if(k>5) {
printf("ERR\n");
continue;
}
for(int i=1;i<=k;i++) {
if(i==5) {
if(a[i]<0||a[i]>65535) flag=false;
} else {
if(a[i]<0||a[i]>255) flag=false;
}
}
if(!flag) {
printf("ERR\n");
continue;
}
if(soc[1]=='S') {
bool flag2=true;
++se;
for(int i=1;i<=n;i++) {
server[se][i]=s[i];
}
for(int i=1;i<se;i++) {
if(strcmp(server[i]+1,server[se]+1)==0) {
printf("FAIL\n");
flag2=false;
break;
}
}
if(flag2) printf("OK\n");
}
else {
bool flag3=false; int kkk=0;
for(int i=1;i<=se;i++) {
if(strcmp(server[i]+1,s+1)==0) {
flag3=true; kkk=i;
break;
}
}
if(!flag3) {
printf("FAIL\n");
continue;
}
for(int i=1;i<=oo;i++) {
if(strcmp(all[i]+1,server[kkk]+1)==0&&p[i]=='S') {
printf("%d\n",i);
break;
}
}
}
}
return 0;
}