https://www.luogu.com.cn/record/83288893
#include<bits/stdc++.h>
using namespace std;
int n;
char dic[5]={' ','.','.','.',':'};
string op,ad;
map <string,int> Server;
long long num(string Num){
long long number=0;
for(int i=0;i<Num.length();i++){
number+=(Num[i]-48)*pow(10,Num.length()-i-1);
}
return number;
}
bool check(string AD){
int ji=0;
string numPart;
long long ip[6]={0};
for(int i=0;i<=AD.length();i++){
if(AD[i]=='.'||AD[i]==':'||i==AD.length()){
ji++;
if(ji<=4&&dic[ji]!=AD[i])
return false;
else{
ip[ji]=num(numPart);
//cout<<ip[ji];
if(ji<=4&&(ip[ji]>255||ip[ji]<0)) return false;
else if(ip[ji]>65535||ip[ji]<0) return false;
numPart="";
}
}
else{
numPart.push_back(AD[i]);
}
}
string rebuild;
for(int i=1;i<=5;i++){
string a;
while(ip[i]>0){
a.push_back(ip[i]%10+48);
ip[i]/=10;
}
for(int j=a.length()-1;j>=0;j--){
rebuild.push_back(a[j]);
}
rebuild.push_back(dic[i]);
}
if(rebuild.compare(AD)) return true;
else return false;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>op>>ad;
if(check(ad)){
if(op=="Server"){
if(Server.count(ad)!=0) printf("FAIL\n");
else{
printf("OK\n"); Server[ad]=i;
}
}
else{
if(Server.count(ad)==0) printf("FAIL\n");
else printf("%d\n",Server[ad]);
}
}
else{
printf("ERR\n");
}
}
return 0;
}