比赛 20220418高一小测验 评测结果 AAAAAAAAAAAWWAAAAWWW
题目名称 网络连接 最终得分 75
用户昵称 Lesater 运行时间 0.008 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-04-18 20:47:52
显示代码纯文本
#include<bits/stdc++.h>
#include<string>
using namespace std;
#define P pair<string,int>
P s[1001];
int x=1,t=0;
bool flag=true;
int turn(string a)
{
    int tot=0;
    for(int i=0;i<a.size() ;++i)
        tot=tot*10+a[i]-'0';
    return tot;
}
bool legal(string a)
{
    int l=0,r=0;
    if(a.find(".")==string::npos||a.find(":")==string::npos) return false;
    l=a.find(':')+1;
    if(a.find(":",l)!=string::npos) return false;
    l=0;
    for(int i=1;i<=3;++i)
        l=a.find(".",l)+1; 
    if(a.find(".",l+1)!=string::npos) return false;
    l=0;
    while(x>0)
    {        
        if(a.find(".",l)==string::npos)
        {        
                r=a.find(":",l);
                if(turn(a.substr(l,r-l))>255||turn(a.substr(l,r-l))<0)
                return false;
                if(a.substr(l,r-l)[0]=='0'&&a.substr(l,r-l).size()!=1)
                return false;  
                break;
        }
        r=a.find(".",l);
        if(turn(a.substr(l,r-l))>255||turn(a.substr(l,r-l))<0)
        return false;  
        if(a.substr(l,r-l)[0]=='0'&&a.substr(l,r-l).size()!=1)
        return false;
        l=a.find(".",l)+1;
    }
    l=a.find(":")+1;
    if(turn(a.substr(l,a.size()-l))>65535||turn(a.substr(l,a.size()-l))<0)
    return false;
    if(a.substr(l,a.size()-l)[0]=='0'&&a.substr(l,a.size()-l).size()!=1)
    return false;
    return true;
}
int main()
{
    freopen("csp2021pj_network.in","r",stdin);
    freopen("csp2021pj_network.out","w",stdout);
    int n;
    cin>>n;
    string a,b;
    for(int i=1;i<=n;++i)
    {
        cin>>a>>b;
        if(!legal(b))
        cout<<"ERR"<<endl;
        else if(a=="Server")
        {
            for(int j=1;j<=t;++j)
            if(b==s[j].first) 
            {
            cout<<"FAIL"<<endl;
            flag=false;
            }
            if(flag==true)
            {
            t++;
            s[t].first=b;
            s[t].second=i;
            cout<<"OK"<<endl;
            }
            flag=true;
        }
        else
        {
            for(int j=1;j<=t;++j)
            if(b==s[j].first) 
            {
            cout<<s[j].second<<endl;
            flag=false;
            break;
            }
            if(flag==true)
            cout<<"FAIL"<<endl;
            flag=true;
        }
    }
    return 0;
}