65pts 求调,玄关
查看原帖
65pts 求调,玄关
905133
sssscy_free_stdio楼主2023/8/15 09:55
#include<bits/stdc++.h>
using namespace std;
int n,cnt;
string op,ad;
map<string,int>cnt_Server;
bool check(string now){
	int len=now.size();
	int cnt=0,cnt1=0;
	for(int i=0;i<len;i++){
		if(now[i]=='.'){
			cnt++;
			if(i==len-1||now[i+1]==':'||now[i+1]=='.'){
				return false;
			}if(cnt>3){
				return false;
			}else if(cnt1>0){
				return false;
			}
		}else if(now[i]==':'){
			cnt1++;
			if(i==len-1||now[i+1]==':'||now[i+1]=='.'){
				return false;
			}
			if(cnt1>1){
				return false;
			}else if(cnt<3){
				return false;
			}
		}else if(now[i]=='0'&&now[i+1]!='.'&&now[i+1]!=':'&&(now[i-1]=='.'||now[i-1]==':')){
			return false;
		}
	}cnt=0,cnt1=0;
	for(int i=0;i<len;i++){
		if(now[i]>='0'&&now[i]<='9'){
			int j=i;
			long long ret=0;
			while(now[j]>='0'&&now[j]<='9'){
				ret=ret*10+now[j]-'0';
				j++;
			}if(cnt1==1){
				if(ret>65535){
					return false;
				}
			}else if(cnt<=3){
				if(ret>255){
					return false;
				}
			}i=j-1;
		}if(now[i]=='.'){
			cnt++;
		}if(now[i]==':'){
			cnt1++;
		}
	}return true;
}int check_Server(string now){
	if(cnt_Server[now]==0&&check(now)==1){
		return 1;
	}else if(cnt_Server[now]>=1&&check(now)==1){
		return 2;
	}return 3;
}int check_Client(string now){
	if(check(now)==1){
		if(cnt_Server[now]>=1){
			return 1;
		}else if(cnt_Server[now]==0){
			return 2;
		}
	}return 0;
}int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		cin>>op>>ad;
		cnt++;
		if(op=="Server"){
			if(check_Server(ad)==1){
				printf("OK\n");
				cnt_Server[ad]=cnt;
			}else if(check_Server(ad)==2){
				printf("FAIL\n");
			}else if(check_Server(ad)==3){
				printf("ERR\n");
			}
		}else if(op=="Client"){
			if(check_Client(ad)==0){
				printf("ERR\n"); 
			}else if(check_Client(ad)==2){
				printf("FAIL\n");
			}else if(check_Client(ad)==1){
				printf("%d\n",cnt_Server[ad]);
			}
		}
	}
	return 0;
}```
2023/8/15 09:55
加载中...