璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:luogup7911
problems
名称网络连接
题目编号2021 CSP-J T3
题目链接luogu.com.cn/…
来源CCF
算法分类字符串, 模拟
难易程度一般般

网络连接

想法

按照题意进行模拟,难点在判断字符串是否不符合要求中,有可能存在没有值、有可能存在值过大,需要细心写模拟。

或者可以使用sscanf方案来实现。

代码实现

#include<cstdio>
#include<cstring>
 
char type[10], line[30];
char server[1010][30];
int number[1010], cnt = 0;
 
bool check(int len) {
	int tempCnt = 0, flag = 0, temp = 0;
	for(int i=0; i<len; i++) {
		if(line[i] == '.')
			tempCnt++;
		else if(line[i] == ':'){
			if(flag == 1 || tempCnt != 3)
				return false;
			flag = 1;
		}
		else if(!(line[i] >= '0' && line[i] <= '9'))
			return false;
	}
	if(tempCnt != 3 || !flag)
		return false;
	tempCnt = 0;
	for(int i=0; i<len; i++) {
		if(line[i] >= '0' && line[i] <= '9'){
			temp = temp * 10 + line[i] - '0';
			if(temp > 65535)return false;
		}
		else {
			if(i == 0 || i == len-1)
				return false;
			if(!(line[i-1] >= '0' && line[i-1] <= '9'))
				return false;
			if(!(line[i+1] >= '0' && line[i+1] <= '9'))
				return false;
			if(tempCnt < 4 && temp > 255)
				return false;
			tempCnt++;
			temp = 0;
		}
	}
	if(line[0] == '0' && line[1]>='0' && line[1] <= '9')
		return false;
	for(int i=1; i<len; i++) 
		if(line[i] == '0' && !(line[i-1] >= '0' && line[i-1] <= '9') && (line[i+1]>='0' && (line[i+1] <= '9')))
			return false;
	return true;
}
 
int search() {
	for(int i=0; i<cnt; i++) 
		if(strcmp(line, server[i]) == 0) 
			return number[i];
	return -1;
}
 
int main() {
	int T;
	scanf("%d", &T);
	for(int i=1; i<=T; i++){
		scanf("%s %s", type, line);
		int len = strlen(line);
		if(!check(len)) {
			printf("ERR\n");
			continue;
		}
		if(type[0] == 'S') {
			if(search() != -1) 
				printf("FAIL\n");
			else {
				printf("OK\n");
				strcpy(server[cnt], line);
				number[cnt] = i;
				cnt++;
			}
		}
		else {
			int temp = search();
			if(temp == -1) 
				printf("FAIL\n");
			else 
				printf("%d\n", temp);
		}
	}
	return 0;
}
/app/www/public/data/pages/icpc/problems/luogup7911.txt · 最后更改: 2024/03/13 07:43 由 温婕莺