75分求调!!!
查看原帖
75分求调!!!
1299103
_BYTE_楼主2024/10/21 21:33
#include<bits/stdc++.h>
using namespace std;
int n;
string s1;
struct node{
	int k=0,ans=0;
	string s;
}c[1005];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s1>>c[i].s;
		if(s1=="Server") c[i].k=1;//判断为客户机或服务机 
		int f=0,q=0;
        for(int j=c[i].s.length()-1;j>=0;j--){
			int l=0,sum=0;
        	while(c[i].s[j]!=':'&&c[i].s[j]!='.'&&j>=0){
        		sum+=pow(10,l)*(c[i].s[j]-'0');
        		l++; j--;
			}//每个符号间的数字 
			q++;
			if((q==1&&c[i].s[j]=='.')||(q>1&&c[i].s[j]==':')||(q>5)){
				c[i].ans=-2;
				break;
			}//判断最后一个符号是否为:、前几个字符是否为.、总字符数量是否>4 
			if(c[i].s[j]==':'){
				if(sum>65535||sum<0||(c[i].s[j+1]=='0'&&c[i].s[j+2]>='0'&&c[i].s[j+2]<='9')){
					c[i].ans=-2;
					break;
				}
			}//判断:后数字的大小及有无前导零 
			else{
				if(sum>255||sum<0||(c[i].s[j+1]=='0'&&c[i].s[j+2]>='0'&&c[i].s[j+2]<='9')){
					c[i].ans=-2;
					break;
				}
			}//判断.后数字的大小及有无前导零
		}
	}
	for(int i=1;i<=n;i++){
		if(c[i].k==1&&c[i].ans==0){
			c[i].ans=-1;
			for(int j=i+1;j<=n;j++){
				if(c[j].k==1&&c[j].ans==0&&c[i].s==c[j].s){
					c[j].ans=-3;
				}
			}
		}
	}//重复编号的服务机不可连接 
	for(int i=1;i<=n;i++){
		if(c[i].k==1&&c[i].ans==-1){
			for(int j=i+1;j<=n;j++){
				if(c[j].k==0&&c[j].ans==0&&c[i].s==c[j].s){
					c[j].ans=i;
				}
			}
		}
	}//服务机与客户机连接 
	for(int i=1;i<=n;i++){
		if(c[i].ans==-1) cout<<"OK";
		else if(c[i].ans==-2) cout<<"ERR";
		else if(c[i].ans==-3||c[i].ans==0) cout<<"FAIL";//此服务机为重复地址或此客户机未成功连接 
		else cout<<c[i].ans;
		cout<<endl;
	}
	return 0;
}
2024/10/21 21:33
加载中...