帮帮我吧!!(悬关)
查看原帖
帮帮我吧!!(悬关)
556285
FBI_Hu_Tao楼主2023/10/12 22:14

90pts 14、21测试点

#include<bits/stdc++.h>
using namespace std;
struct Server{
    int a,b,c,d,e,id;
}ji[1011];
int n,cnt;
long long temp[1011];
string Type,num;
bool check_num(int s,int e,int t){
    long long number=0;
    if(num[s]=='0'&&num[s+1]!=0&&e>s)return 0;
    for(int i=s;i<=e;i++){
        number=number*10+num[i]-'0';
    }
    if(t<=4){
        if(number>=0&&number<=255)return 1;
    }else{
        if(number>=0&&number<=65535)return 1;
    }
    return 0;
}
long long get_num(int s,int e){
    long long number=0;
    for(int i=s;i<=e;i++){
        number=number*10+num[i]-'0';
    }
    return number;
}
signed main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>Type>>num;
        int s=0,flag=0,cnt1=0,cnt2=0,sum=0,t=1;
        memset(temp,0,sizeof(temp));
        for(int j=0;j<num.length();j++){
            if(num[j]!='.'&&num[j]!=':'&&num[j]<'0'&&num[j]>'9'){
                flag=1;
                break;
            }else if(num[j]=='.'){
                if(j-1>=0){
                    if(num[j-1]<'0'||num[j-1]>'9'){
                        flag=1;break;
                    }
                }
                if(j+1<num.length()){
                    if(num[j+1]<'0'||num[j+1]>'9'){
                        flag=1;break;
                    }
                }
                if(cnt2!=0||cnt1>3){
                    flag=1;
                    break;
                }
                if(!check_num(s,j-1,t)){
                    flag=1;
                    break;
                }
                temp[++sum]=get_num(s,j-1);
                t++;
                s=j+1;
                cnt1++;
            }else if(num[j]==':'){
                if(j-1>=0){
                    if(num[j-1]<'0'||num[j-1]>'9'){
                        flag=1;break;
                    }
                }
                if(j+1<num.length()){
                    if(num[j+1]<'0'||num[j+1]>'9'){
                        flag=1;break;
                    }
                }
                if(cnt1!=3||cnt2!=0){
                    flag=1;
                    break;
                }
                if(!check_num(s,j-1,t)){
                    flag=1;
                    break;
                }
                temp[++sum]=get_num(s,j-1);
                t++;
                s=j+1;
                cnt2++;
            }
        }
        if(s==num.length())flag=1;
        if(!check_num(s,num.length()-1,t))flag=1;
        if(flag==1||cnt1!=3||cnt2!=1)cout<<"ERR"<<endl;
        else{
            temp[++sum]=get_num(s,num.length()-1);
            flag=0;
            if(Type[0]=='S'){
                for(int i=1;i<=cnt;i++){
                    if(ji[i].a==temp[1]&&ji[i].b==temp[2]&&ji[i].c==temp[3]&&ji[i].d==temp[4]&&ji[i].e==temp[5]){
                        flag=1;
                        break;
                    }
                }
                if(flag==1)cout<<"FAIL"<<endl;
                else{
                    cout<<"OK"<<endl;
                    ji[++cnt].a=temp[1];
                    ji[cnt].b=temp[2];
                    ji[cnt].c=temp[3];
                    ji[cnt].d=temp[4];
                    ji[cnt].e=temp[5];
                    ji[cnt].id=i;
                }
            }else{
                int point;
                for(int i=1;i<=cnt;i++){
                    if(ji[i].a==temp[1]&&ji[i].b==temp[2]&&ji[i].c==temp[3]&&ji[i].d==temp[4]&&ji[i].e==temp[5]){
                        flag=1;
                        point=ji[i].id;
                        break;
                    }
                }
                if(flag==1)cout<<point<<endl;
                else cout<<"FAIL"<<endl;
            }
        }
    }
    return 0;
}
2023/10/12 22:14
加载中...