90pts,求助!
查看原帖
90pts,求助!
556285
FBI_Hu_Tao楼主2023/8/3 19:32

14,21WA了,求调!

#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'&&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;
}
int 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/8/3 19:32
加载中...