75pts求大佬调一下
查看原帖
75pts求大佬调一下
1376660
JX_CSP_2024楼主2024/10/15 13:23
#include<bits/stdc++.h>
using namespace std;
int n;
int pos[6];//'.'和':'的所在位置(ad中)
int num[6];//a,b,c,d,e
int lenp=1;
int cnt1=0,cnt2=0;//'.'和':'的个数
string op,ad;
int fs=0;//server数组中是否已经有内容
string server[1010];//符合条件的服务机地址
int to_int(string s,int id)
{
    if(s[0]=='0' && s!="0")//判断是否有前导0
    {
        return -1;
    }
    int ans=0;
    for(int i=0; i<s.size(); i++)
    {
        ans=ans*10+(int)(s[i]-'0');
    }
    if(id<5)//a,b,c,d
    {
        return ((ans>=0 && ans<=255)? ans:-1);//-1:方便下面判断
    }
    else//e
    {
        return ((ans>=0 && ans<=65535)? ans:-1);
    }
}
int main()
{
    cin>>n;
    int f4=0;
    for(int p=1; p<=n; p++)
    {
        cin>>op>>ad;
        for(int i=0; i<ad.size(); i++)
        {
            if(ad[i]=='.')
            {
                pos[lenp]=i;//记录下这个'.'的位置
                lenp++;
                cnt1++;
            }
            else if(ad[i]==':')
            {
                pos[lenp]=i;//记录下这个':'的位置
                lenp++;
                cnt2++;
            }
            if(lenp>5)//'.'和':'的个数和超过4
            {
                cout<<"ERR"<<endl;
                f4=1;
                break;
            }
        }
        if(f4==1)
        {
            lenp=1;
            cnt1=0,cnt2=0;
            continue;
        }
        if(lenp<5 || cnt1!=3 || cnt2!=1 || ad[pos[4]]!=':')//ad中记录下的第四个非数字字符的位置的字符不为':'
        {
            cout<<"ERR"<<endl;
            lenp=1;
            cnt1=0,cnt2=0;
            continue;
        }
        pos[0]=-1;//方便下面的取字串
        pos[5]=ad.size();//同73行
        for(int i=1; i<=5; i++)
        {
            num[i]=to_int(ad.substr(pos[i-1]+1,pos[i]-pos[i-1]-1),i);
        }
        if(op=="Server")
        {
            if(num[1]==-1 || num[2]==-1 || num[3]==-1 || num[4]==-1 || num[5]==-1)
            {
                cout<<"ERR"<<endl;
            }
            else
            {
                int f=0;
                for(int i=1; i<=p; i++)
                {
                    if(server[i]==ad)
                    {
                        f=1;
                    }
                }
                if(f==1 && fs==1)//和server数组中存储的地址冲突
                {
                    cout<<"FAIL"<<endl;
                }
                else if(f==0 || fs==0)
                {
                    cout<<"OK"<<endl;
                    server[p]=ad;
                    fs=1;//server中有内容
                }
            }
        }
        else
        {
            if(num[1]==-1 || num[2]==-1 || num[3]==-1 || num[4]==-1 || num[5]==-1)
            {
                cout<<"ERR"<<endl;
            }
            else
            {
                int f=0;
                for(int i=1; i<=p; i++)
                {
                    if(server[i]==ad)
                    {
                        cout<<i<<endl;
                        f=1;
                        break;
                    }
                }
                if(f==0)
                {
                    cout<<"FAIL"<<endl;
                }
            }
        }
        lenp=1;
        cnt1=0,cnt2=0;
    }
    return 0;
}

2024/10/15 13:23
加载中...