65求条(1关)
查看原帖
65求条(1关)
722012
Amiee1103楼主2024/10/23 23:23
#include<bits/stdc++.h>
using namespace std;
char a[1005][35],b[1005][30];
int n,la=1,lb=1,ans[1005],anss=0;
bool check1(char c[],int lla){//地址合法
	
	int si=0,s2=1;
	bool t1=0,t2=1,t3=0,t4=0;
	for(int i=0;i<lla;i++){
		if(t2&&c[i]=='0'&&(i+1!=lla&&!((c[i+1]=='.'&&s2<4)||(c[i+1]==':'&&s2==4)))){
			t1=1;
			printf("ERR\n");
			return 1;
		}
		else if(c[i]>='0'&&c[i]<='9'){
			t3=1;
			si=si*10+c[i]-'0';
			t2=0;
			t4=1;
		}
		else if(((c[i]=='.'&&s2<4)||(c[i]==':'&&s2==4))&&t3) {
			if(si>255){
				t1=1;
				printf("ERR\n");
				return 1;
			}
			else {
				t3=0;
				si=0;
				t2=1;
				s2++;
				t4=0;
			}
		}
		else{
			printf("ERR\n");
			return 1;
		}

	}
	if(si>65535||s2<4||t4==0)
	{
		printf("ERR\n");
		return 1;
	}
	return 0;
}
bool check2(char c[],int lla){//是否有一样的
	for(int i=1;i<lb;i++){
		bool t1=0;
		int llb=strlen(b[i]);
		if(llb!=lla) continue;
		for(int j=0;j<lla;j++){
			if(b[i][j]!=c[j]){
				t1=1;
				break;
			}
		}
		if(t1==0) {
			anss=ans[i];
			return 1;
		}
	}
	return 0;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		anss=0;
		char c[10],c1;
		cin>>c1;
		scanf("%s",&c);
		if(c[0]=='S'||c1=='S'){//服务机
			scanf("%s",&b[lb]);
			int lla=strlen(b[lb]);
			if(check1(b[lb],lla)) {
				continue;
			}
			if(check2(b[lb],lla)==1&&lb!=1){
				printf("FAIL\n");
			}else{
				ans[lb]=i;
				lb++;
				printf("OK\n");
			}
		}else{//客户机
			scanf("%s",&a[la]);
			int lla=strlen(a[la]);
			if(check1(a[la],lla)==1) {
				continue;
			}
			if(check2(a[la],lla)==1){
				printf("%d\n",anss);
			}else{
				printf("FAIL\n");
			}
		}
		
	}
	return 0;
}
//触底是会反弹的! 
/*




1000
Server 8
Server 4.3.2.1:
Server ...:
Server :...
Server 1.1.1.:
Server 1.0.2.3:008
Server 1.1.1.1:5000000000
Server 192.168.1.1:08
Server .168.1.1:8
Server 192.168.1.1:0
Server 1.1.1.1.1



*/

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