查看: 943|回复: 0

[C/C++] 【CSP-J 2021】网络连接

[复制链接]

1

技术

25

魅力

7

原创

管理员

Rank: 9Rank: 9Rank: 9

积分
11343
人气
297
分享
42

论坛元老优秀版主活跃会员最佳新人灌水之王

发表于 2021-10-23 22:26:19 | 显示全部楼层 |阅读模式


AC Code
[C++] 纯文本查看 复制代码
#include <iostream>#include <cstdio>
#include <cmath>
#include <map>
#include <cstring>
#include <string>
using namespace std;
map<string, int> m;
int main() {
	int n;
	scanf("%d", &n);
	for (int k = 0; k < n; k++) {
		string t, a;
		cin >> t >> a;
		if (a.length() < 10) {
			printf("ERR\n");
			break;
		}
		int j = 0;
		int addr[5];
		memset(addr, 0, sizeof addr);
		if (a[j] == '.' || (a[j] == '0' && isdigit(a[j + 1]))) {
			printf("ERR\n");
			continue;
		}
		while (j < a.length() && a[j] != '.') {
			addr[0] = addr[0] * 10 + a[j] - '0';
			j++;
		}
		j++;
		if (j < a.length() && a[j] == '.' || (a[j] == '0' && isdigit(a[j + 1]))) {
			printf("ERR\n");
			continue;
		}
		while (j < a.length() && a[j] != '.') {
			addr[1] = addr[1] * 10 + a[j] - '0';
			j++;
		}
		j++;
		if (j < a.length() && a[j] == '.' || (a[j] == '0' && isdigit(a[j + 1]))) {
			printf("ERR\n");
			continue;
		}
		while (j < a.length() && a[j] != '.') {
			addr[2] = addr[2] * 10 + a[j] - '0';
			j++;
		}
		j++;
		if (j < a.length() && a[j] == '.' || (a[j] == '0' && isdigit(a[j + 1]))) {
			printf("ERR\n");
			continue;
		}
		while (j < a.length() && a[j] != ':') {
			addr[3] = addr[3] * 10 + a[j] - '0';
			j++;
		}
		j++;
		if (j < a.length() && (a[j] == '.' || (a[j] == '0' && j + 1 < a.length() && isdigit(a[j + 1])))) {
			printf("ERR\n");
			continue;
		}
		bool flag = false;
		while (j < a.length()) {
			if (!isdigit(a[j])) {
				printf("ERR\n");
				break;
			}
			addr[4] = addr[4] * 10 + a[j] - '0';
			j++;
		}
		if (flag) continue;
		for (int i = 0; i < 4; i++) {
			if (!(addr[i] >= 0 && addr[i] <= 255)) {
				printf("ERR\n");
				flag = true;
				break;
			}
		}
		if (flag) continue;
		if (!(addr[4] >= 0 && addr[4] <= 65535)) {
			printf("ERR\n");
			continue;
		}
		int cnt = m.count(a);
		if (t == "Server") {
			if (cnt) {
				printf("FAIL\n");
				continue;
			}
			else {
				m[a] = k + 1;
				printf("OK\n");
				continue;
			}
		}
		else if (t == "Client") {
			if (cnt) {
				printf("%d\n", m[a]);
			}
			else {
				printf("FAIL\n");
			}
		}
	}
	return 0;
}

忘记在考场上是怎么写的了,于是我又写了一遍~
代码写得有点乱,不过顺利通过了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Just do it.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表