感觉该有的都有了啊
就是过不了。。。
#include<iostream>
using namespace std;
bool nm(string s, int l, int r, int tgt){
int t=1, n=0;
string s2="";
for(int i=r; i>=l; i--){
n += (s[i] - '0') * t;
t *= 10;
}
for(int i=l; i<=r; i++){
s2 += s[i];
}
if((s2.size() >= 2 && s2[0] == '0')) return false;
if(n <= tgt && n >= 0) return true;
else return false;
}
bool isAd(string s){
int len = s.size();
int c1=0, c2=0;
int a1[10], a2[10];
for(int i=0; i<len; i++){
if(s[i]=='.'){
c1++;
a1[c1] = i;
}
else if(s[i]==':'){
c2++;
a2[c2] = i;
}
}
if(c1 != 3 || c2 != 1 || a2[1] < a1[3]) return false;
if(!nm(s, 0, a1[1]-1, 255)) return false;
if(!nm(s, a1[1]+1, a1[2]-1, 255)) return false;
if(!nm(s, a1[2]+1, a1[3]-1, 255)) return false;
if(!nm(s, a1[3]+1, a2[1]-1, 255)) return false;
if(!nm(s, a2[1]+1, len-1, 65535)) return false;
return true;
}
const int N = 1010;
string op[N];
string ad[N];
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>op[i]>>ad[i];
}
for(int i=0; i<n; i++) {
if(op[i] == "Server") {
int f=0;
if(isAd(ad[i])) {
for(int j=0; j<i; j++) {
if(op[j] == "Server" && ad[j] == ad[i]) {
f = 1;
break;
}
}
}
else f = 2;
if(f == 0) cout<<"OK";
else if(f == 2) cout<<"ERR";
else cout<<"FAIL";
cout<<"\n";
}
else {
int f=0;
if(isAd(ad[i])){
for(int j=0; j<i; j++) {
if(op[j] == "Server" && ad[i] == ad[j]) {
f = j+1;
break;
}
}
}
else f = -1;
if(f == -1) cout<<"ERR";
if(f > 0) cout<<f;
else if(f == 0)cout<<"FAIL";
cout<<"\n";
}
}
return 0;
}