hack点:
.在:后面
开头或结尾是.或:
给出我的代码(只是通过了官方数据,不一定全部正确,如有问题,请指出)
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define up(i,j,k,l) for(int i=j;i<=k;i+=l)
#define down(i,j,k,l) for(int i=j;i>=k;i-=l)
using namespace std;
int n;
string s1,s2;
map<string,int> mp;
int ct;
//vector<string> v;
bool checks2()
{
ll res=0;
int ct=0,ctm=0;
//cout<<(int)s2.length()-1;
up(i,0,(int)s2.length()-1,1){
if(s2[i]=='-'){
return false;
}
if(s2[i]=='.' || s2[i]==':'){
//cout<<res<<endl;
if(res>255){
return false;
}
if(s2[i+1]=='.' || s2[i+1]==':'){
return false;
}
if(s2[i]=='.'){
ct++;
}
if(s2[i]==':'){
ctm++;
if(ct!=3){
return false;
}
}
if((i+2<=(int)s2.length()-1 && s2[i+1]=='0' && s2[i+2]>='0' && s2[i+2]<='9') || (s2[i-1]=='.' || s2[i+1]=='.')){
return false;
}
res=0;
}
else{
res*=10;
res+=(int)s2[i]-'0';
}
}
if(res>65535 || ctm!=1 || ct!=3){
return false;
}
else{
return true;
}
}
void solve()
{
cin>>n;
up(i,1,n,1){
ct=i;
s1.clear();
s2.clear();
cin>>s1>>s2;
if(s2.size()==0 || (s2[0]=='0' && s2[1]>='0' && s2[1]<='9') || s2[(int)s2.length()-1]=='.' || s2[(int)s2.length()-1]==':' || s2[0]==':' || s2[0]=='.'|| checks2()==false){
cout<<"ERR";
//v.push_back("ERR");
}
else{
if(s1=="Server"){
if(!mp.count(s2)){
mp[s2]=ct;
cout<<"OK";
//v.push_back("OK");
}
else{
cout<<"FAIL";
//v.push_back("FAIL");
}
}
else{
if(mp.count(s2)){
cout<<mp[s2];
//v.push_back(to_string(mp[s2]));
}
else{
cout<<"FAIL";
//v.push_back("FAIL");
}
}
}
cout<<endl;
}
/*
cout<<endl;
for(auto fw:v){
cout<<fw<<endl;
}
*/
return;
}
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(0);
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int _=1;
//cin>>_;
up(i,1,_,1){
solve();
}
return 0;
}