萌新刚学oi(90pts,pjT3,没过Hack,#17,#18)
查看原帖
萌新刚学oi(90pts,pjT3,没过Hack,#17,#18)
359422
无咕_楼主2021/11/25 16:49

code:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
map<string,int>server;
int a,b,c,d,e;
int n;
template<typename T>inline void read(T &x){
	x=0;
	int f=1;register char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
	x*=f;
}template<typename T,typename ...Arr>inline void read(T &x,Arr &...arr){read(x);read(arr...);}
bool check(string a){
	long long x=0;
	int num=0;
	bool flag=0,f=0,lastbd=0,rd=0;
	//flag与f是判是否带前导0,lastbd是上一个是否为符号,rd是上一个是否读了数字 
	for(unsigned int i=0;i<a.length();i++){
//		cout<<"now:"<<i<<"--"<<a[i]<<endl;
		if(isdigit(a[i])){lastbd=0;rd=1;
			if(flag==1&&a[i]=='0')f=1;
			if(x==0&&a[i]=='0')flag=1;
			x=x*10+a[i]-'0';
		}else{
			num++;
//			cout<<"chech ok "<<" is num:"<<x<<" and now num:"<<num<<" flag"<<flag<<","<<f<<endl;
			if(flag==1&&x!=0)return false;
			if(f)return false;
			if(!rd)return false;
			if(num<=4){//192.168.0.1:088
				if(x>255)return false;
			}if(num>4){
				if(x>65535)return false;
			}if(a[i]=='.'){
				if(lastbd)return false;
				else lastbd=1; 
				if(num>=4)return false;
			}if(a[i]==':'){
				if(lastbd)return false;
				else lastbd=1; 
				if(num<4)return false;
			}flag=0,f=0;
			x=0;rd=0;
		}
	}if(x!=0&&rd)num++;
	if(x==0&&!rd)return false;
//	cout<<"chech ok "<<" is num:"<<x<<" and now num:"<<num<<" flag"<<flag<<","<<f<<endl;
	if(flag==1&&x!=0)return false;
	if(f)return false;
	if(num<=4){
		if(x>255)return false;
	}if(num>4){
		if(x>65535)return false;
	}if(num!=5)return false;
	return true;
}int main(){
//	freopen("network4.in","r",stdin);
//	freopen("network.out","w",stdout);
	read(n);
	for(int i=1;i<=n;i++){
		string a,str;
		cin>>str>>a;
		if(str=="Server"){
			if(check(a)){
				if(!server[a]){
					printf("OK\n");
					server[a]=i;
				}else{
					printf("FAIL\n");
				}
			}else printf("ERR\n");
		}if(str=="Client"){
			if(check(a)){
				if(server[a]){
					printf("%d\n",server[a]);
				}else{
					printf("FAIL\n");
				}
			}else printf("ERR\n");
		}
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;            
}

蚌埠住了,求调

2021/11/25 16:49
加载中...