比赛 20220418高一小测验 评测结果 C
题目名称 网络连接 最终得分 0
用户昵称 Tab↹ 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-04-18 21:49:34
显示代码纯文本
#include<bits/stdc++.h>
#include<string>

using namespace std;

typedef pair<string,int> P;
P s[1001];

int x=1,t=0;
bool flag=true;

int turn(const string& a)
{
    int tot=0;
    for(int i = 0; i < a.size(); ++i)
        tot = tot*10+a[i]-'0';
    return tot;
}

bool legal(const 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;
}