样例1、2运行正确,测试0分。求调
查看原帖
样例1、2运行正确,测试0分。求调
976340
zhuona楼主2024/10/11 20:36
#include <iostream>
#include <cstring>
using namespace std;
struct str{
	string sad;
	int si;
}a[1005];
bool c1(string ad){
	if(ad[0]=='0'&&ad.length()!=1)return 0;
	if(!ad.length())return 0;
	if(ad.length()<3)return 1;
	if(ad[0]>'2')return 0;
	if(ad[0]<'2')return 1;
	if(ad[1]>'5')return 0;
	if(ad[1]<'5')return 1;
	if(ad[2]>'5')return 0;
	return 1;
}
bool c2(string ad){
	if(ad[0]=='0'&&ad.length()!=1)return 0;
	if(!ad.length())return 0;
	if(ad.length()<5)return 1;
	if(ad[0]>'6')return 0;
	if(ad[0]<'6')return 1;
	if(ad[1]>'5')return 0;
	if(ad[1]<'5')return 1;
	if(ad[2]>'5')return 0;
	if(ad[2]<'5')return 1;
	if(ad[3]>'3')return 0;
	if(ad[3]<'3')return 1;
	if(ad[4]>'5')return 0;
	return 1;
}
bool c(string ad){
	if(ad.length()>21)return 0;
	int i;
	for(i=0;i<ad.length();i++)if(ad[i]==':')break;
	if(i>15)return 0;
	if(!c2(ad.substr(i+1,ad.length()-i-1)))return 0;
	ad=ad.substr(0,i+2);
	for(int j=1;j<=3;j++){
		for(i=0;i<ad.length();i++)if(ad[i]=='.')break;
		if(i>15-j*4)return 0;
		if(!c1(ad.substr(0,i+2)))return 0;
		ad=ad.substr(i+1,ad.length()-i-1);
	}
	if(!c1(ad))return 0;
	return 1;
} 
int main(){
	int n,j=1;
	cin>>n;
	for(int i=1;i<=n;i++){
		string op,ad;
		cin>>op>>ad;
		if(op=="Server"){
			if(/*地址符合规范*/c(ad)){
				bool b=false;
				for(int k=1;k<j;k++){
					if(a[k].sad==ad){
						b=true;
						break;
					}
				}
				if(/*之前有服务机用过这个地址*/b)cout<<"FAIL\n";
				else{
					cout<<"OK\n";
					a[j].sad=ad;
					a[j++].si=i;
				}
			}
			else cout<<"ERR\n";
		}
		if(op=="Client"){
			if(/*地址符合规范*/c(ad)){
				bool b=false;
				int ak;
				for(int k=1;k<j;k++){
					if(a[k].sad==ad){
						b=true;
						ak=a[k].si;
						break;
					}
				}
				if(/*之前有服务机用过这个地址*/b)cout<</*服务机的编号*/ak<<endl;
				else cout<<"FAIL\n";
			}
			else cout<<"ERR\n";
		}
	}
	return 0;
}

2024/10/11 20:36
加载中...