没啥好说的,又不是写题解
#include <bits/stdc++.h>
using namespace std;
int n;
//使用map来存储已经成功建立的服务机的地址及编号
map <string,int> mapp;
/*
* 符合规范的服务机的要求:
* ...:
* 前几个数字的值必须小于等于255 最后一个数的值必须小于等于65535
* 不能有多的前导0;
*/
bool check(string a){
//5个字符+17+1
int size=a.size();
if(size>=23)return 0;
string t="";
int i;
for(i=0;i<size;i++){
if(!(a[i]>='0' && a[i]<='9')){
t+=a[i];
}
}
if(t!="...:")return 0;
t="";
for(i=0;i<size;i++){
if(a[i]>='0' && a[i]<='9'){
t+=a[i];
}else{
if(t.size()==0)return 0;
if(t[0]=='0' && t.size()!=1)return 0;
int num=0;
int j;
for(j=0;j<t.size();j++){
num=num*10+(int)(t[j]-'0');
}
if(num>255) return 0;
t="";
}
}
int num=0;
int j;
if(t.size()==0)return 0;
if(t[0]=='0' && t.size()!=1)return 0;
for(j=0;j<t.size();j++){
num=num*10+(int)(t[j]-'0');
}
if(num>65535) return 0;
return 1;
}
int main(){
//check 客户机
//server 服务机
//string str;
//while(cin>>str) cout<<check(str);
cin>>n;
int i;
for(i=1;i<=n;i++){
string x,y;
cin>>x>>y;
if(x=="Server"){
if(!check(y)){
printf("ERR");
}else if(mapp[y]){
printf("FAIL");
}else{
printf("OK");
mapp[y]=i;
}
}else if(x=="Client"){
if(!check(y)){
printf("ERR");
}else if(mapp[y]==0){
printf("FAIL");
}else{
printf("%d",mapp[y]);
}
}
printf("\n");
}
return 0;
}