75pts求助 #13,#14,#19,#20,#21RE
查看原帖
75pts求助 #13,#14,#19,#20,#21RE
893971
1CR_wait_ME楼主2023/6/11 23:28

这是测试点情况
下载了一下#13的数据,编译器上的报错是这样的:

terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_M_create

Abort signal from abort(3) (SIGABRT)

代码如下:

#include <iostream>
#include <string>
using namespace std;

int n;

string ad[1005];//存储每台计算机的地址
int op[1005];//记录计算机的型号: 服务机(Server):0, 客户机(Client):1

int sit[1005];//记录每台计算机最终的连接情况

bool judge(string ad){
	int len = ad.length();
	int last = -1;
	int cnt = 1;
	string numstr[6];
	for (int i = 0; i<len; i++){
		if(ad[i]<'0'||ad[i]>'9'){//为符号
			if((cnt<=3 && ad[i]!='.') || (cnt>3 && ad[i]!=':')) return false;//符号用错
			if(last+1==i) return false;//两个符号连在一起
			last = i;
			cnt++;
			continue;
		}else{//为数字
			numstr[cnt] += ad[i];
		}
		if(last+1==i){
			if(i+1==ad.length()) continue;
			if(ad[i]=='0' && '0'<=ad[i+1] && ad[i+1]<='9') return false;//有先导0
		}
	}
	if(cnt!=5) return false;
	for (int i = 1; i<=5; i++){
		int lenn = numstr[i].length();
		int power = 1;
		int num = 0;
		for (int j = lenn-1; j>=0; j--){
			num += power*(numstr[i][j]-'0');
			power *= 10;
		}
		if((i<=4 && (num<0||num>255)) || (i==5 && (num<0||num>65535))) return false;
	}
	return true;
}

int main(){
	cin >> n;
	for (int i = 1; i<=n; i++){
		string t;
		cin >> t;
		if(t=="Server") op[i] = 0;
		else op[i] = 1;
		cin >> ad[i];
	}
	for (int i = 1; i<=n; i++){
		//是否合规
		if(!judge(ad[i])){
			sit[i] = -1;
			continue;
		}
		//能否成功建立连接
		if(op[i]==0){//若为服务机
			int k = -10;
			for (int j = 1; j<i; j++){
				if(op[j]==1) continue;
				if(ad[j]==ad[i]){
					k = -2;
					break;
				}
			}
			sit[i] = k;
		}else{//若为客户机
			int k = -2;
			for (int j = 1; j<i; j++){
				if(op[j]==1) continue;
				if(ad[j]==ad[i]){
					k = j;
					break;
				}
			}
			sit[i] = k;
		}
	}
	for (int i = 1; i<=n; i++){
		switch(sit[i]){
			case -1: cout << "ERR" << endl;
				break;
			case -2: cout << "FAIL" << endl;
				break;
			case -10: cout << "OK" << endl;
				break;
			default:
				cout << sit[i] << endl;
		}
	}
	return 0;
}
2023/6/11 23:28
加载中...