全WA,RE求助
查看原帖
全WA,RE求助
714508
PongFly楼主2022/10/14 20:48

发现问题了,似乎是建立多个正确server ip后无法连接 我的错误样例:

3
Server 1.1.1.1:2
Server 1.1.1.1:3
Client 1.1.1.1:3

(输出)

OK
OK
FAIL

代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1001;
string com[MAXN];
string addr[MAXN];
bool isBusy[MAXN];
bool isValid[MAXN];
int n;
int ljnum=1; //连接序号 
bool isRightAddr(string addr){
	int a=1,b=1,c=1,d=1,p=1;
	int last=0;
	while(addr[last]!='.'){
		if(a<10) a=0;
		a=(a+int(addr[last]-'0'))*10;
		last++;
		if(addr[last]=='.') a/=10;
	}
	last++;
	while(addr[last]!='.'){
		if(b<10) b=0;
		b=(b+int(addr[last]-'0'))*10;
		last++;
		if(addr[last]=='.') b/=10;
	}
	last++;
	while(addr[last]!='.'){
		if(c<10) c=0;
		c=(c+int(addr[last]-'0'))*10;
		last++;
		if(addr[last]=='.') c/=10;
	}
	last++;
	while(addr[last]!=':'){
		if(d<10) d=0;
		d=(d+int(addr[last]-'0'))*10;
		last++;
		if(addr[last]==':') d/=10;
	}
	last++;
	while(last<addr.size()){
		if(p<10) p=0;
		p=(p+int(addr[last]-'0'))*10;
		last++;
		if(last==addr.size()) p/=10;
	}
//	cout<<a<<"."<<b<<"."<<c<<"."<<d<<":"<<p<<endl;
	if(a>=0&&a<=255&&b>=0&&b<=255&&c>=0&&c<=255&&d>=0&&d<=255){
		if(p>=0&&p<=65535){
			return true;
		}
	}
		
}
int cj(string add,int l){
	if(isRightAddr(add)){
		for(int i=0;i<l;i++){
			if(addr[i]==add && com[i]=="Server"){
				return -1; //ip重复 
			}
		}
	}else{
		return -2;   //ip不符合规范 
	}
	isValid[l]=true;
	return 1; //正确 
}
int lj(string add,int l){
	if(isRightAddr(add)){
		for(int i=0;i<l;i++){
			if(addr[i]==add && com[i]=="Server" && isBusy[i]==false && isValid[i]==true){
				isBusy[i]=true;
				return 1; //连接成功 
			}else{
				return -1;//连接失败 
			}
		}
	}else{
		return -2; //ip不符合规范 
	}
}
int main(){
	memset(isBusy,0,sizeof(isBusy));
	memset(isValid,0,sizeof(isValid));
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>com[i]>>addr[i];
	}
	for(int i=0;i<n;i++){
//		cout<<"isBusy:";
//		for(int i=0;i<n;i++)
//			cout<<isBusy[i]<<" ";
//		cout<<endl;
//		cout<<"isValid:";
//		for(int i=0;i<n;i++)
//			cout<<isValid[i]<<" ";
//		cout<<endl;
//		cout<<"ljnum:";
//		cout<<ljnum<<endl;
		if(com[i]=="Server"){
			if(cj(addr[i],i)==1){
				cout<<"OK\n";
			}else if(cj(addr[i],i)==-1){
				cout<<"FAIL\n";
			}else if(cj(addr[i],i)==-2){
				cout<<"ERR\n";
			}
		}else if(com[i]=="Client"){
			if(lj(addr[i],i)==1){
				cout<<ljnum<<endl;
				ljnum++;
			}else if(lj(addr[i],i)==-1){
				cout<<"FAIL\n";
			}else if(lj(addr[i],i)==-2){
				cout<<"ERR\n";
			}
		}
	}
	return 0;
}

2022/10/14 20:48
加载中...