75分求调
查看原帖
75分求调
656774
ZhangWeiYue0203楼主2024/10/7 16:32

我是蒟蒻,求dalao帮助,谢谢

记录

问题:

可能是判断的部分有问题,记录显示有“ERR”判断为“FAIL”。

代码:

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

ll n,cnts;
string ip[1005],op,ad;

ll trans(string &s,ll st,ll en){
	int num=0;
	if(en-st>1 && s[st]=='0'){
		return -1;
	}
	for(ll i=st;i<en;i++){
		num=num*10+(s[i]-'0');
	}
	return num;
}

bool check(string &s){
	ll psd[4],cdt=0,psm,cdm=0;
	for(ll i=0;i<s.length();i++){
		if(cdt>3 || cdm>1){
			return false;
		}
		if(s[i]=='.'){
			psd[cdt++]=i;
		}else if(s[i]==':'){
			if(cdt!=3 || cdm>0){
				return false;
			}else{
				cdm++;
				psm=i;
			}
		}
	}
	if(cdt!=3 || cdm!=1){
		return false;
	}
	bool flag=true;
	for(ll i=0;i<=4;i++){
		ll num;
		if(i==0){
			num=trans(s,0,psd[0]);
			if(num<0 || num>255){
				flag=false;
			}
		}else if(i==4){
			num=trans(s,psm+1,s.length());
			if(num<0 || num>65535){
				flag=false;
			}
		}else if(i==3){
			num=trans(s,psd[2]+1,psm);
			if(num<0 || num>255){
				flag=false;
			}
		}else{
			num=trans(s,psd[i-1]+1,psd[i]);
			if(num<0 || num>255){
				flag=false;
			}
		}
		if(!flag){
			return false;
		}
	}
	return true;
}

int main(){
	scanf("%d",&n);
	for(ll i=0;i<n;i++){
		cin>>op>>ad;
		if(check(ad)){
			if(op=="Server"){
				bool flag=true;
				for(ll j=0;j<=i;j++){
					if(ip[j]==ad){
						printf("FAIL\n");
						flag=false;
						break;
					}
				}
				if(flag){
					ip[i]=ad;
					printf("OK\n");
				}
			}else if(op=="Client"){
				bool flag=true;
				for(ll j=0;j<=i;j++){
					if(ip[j]==ad){
						printf("%d\n",j+1);
						flag=false;
						break;
					}
				}
				if(flag){
					printf("FAIL\n");
				}
			}
		}else{
			printf("ERR\n");
		}
	}
	return 0;
}
2024/10/7 16:32
加载中...