P7911 [CSP-J 2021] 网络连接 题解 简单模拟

题目链接:https://www.luogu.com.cn/problem/P7911

模拟。

示例程序:

#include <bits/stdc++.h>
using namespace std;

// ip地址-Sever编号 
map<string, int> mp;
int n;

bool check(string s) {
	int a = -1, b = -1, c = -1, d = -1, e = -1;
	int cnt = 1; // 正在解析第几个数字
	for (auto x : s) {
		if (x == '.') {
			cnt++;
			if (cnt > 4)
				return false;
		}
		else if (x == ':') {
			cnt++;
			if (cnt != 5)
				return false;
		}
		else if (x >= '0' && x <= '9') {
			if (cnt == 1) {	// a
				if (a == -1) a = x - '0';
				else if (a == 0) return false;
				else a = a * 10 + x - '0';
				if (a > 255) return false;
			}
			else if (cnt == 2) {	// b
				if (b == -1) b = x - '0';
				else if (b == 0) return false;
				else b = b * 10 + x - '0';
				if (b > 255) return false;
			}
			else if (cnt == 3) {	// c
				if (c == -1) c = x - '0';
				else if (c == 0) return false;
				else c = c * 10 + x - '0';
				if (c > 255) return false;
			}
			else if (cnt == 4) {	// d
				if (d == -1) d = x - '0';
				else if (d == 0) return false;
				else d = d * 10 + x - '0';
				if (d > 255) return false;
			}
			else if (cnt == 5) {	// e
				if (e == -1) e = x - '0';
				else if (e == 0) return false;
				else e = e * 10 + x - '0';
				if (e > 65535) return false;
			}
			else 
				return false;
		}
		else return false;
	}
	return cnt == 5 && a!=-1 && b!=-1 && c!=-1 && d!=-1 && e!=-1;
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		string a, b;
		cin >> a >> b;
		if (!check(b)) {
			cout << "ERR\n";
			continue;
		}
		if (a == "Server") {
			if (mp[b]) {
				cout << "FAIL\n";
			}
			else {
				cout << "OK\n";
				mp[b] = i;
			}
		}
		else { // a == "Client"
			if (mp[b]) {
				cout << mp[b] << "\n";
			}
			else {
				cout << "FAIL\n";
			}
		}
	}
	
	return 0;
}

posted @ 2026-10-11 16:50  quanjun  阅读(6)  评论(0)    收藏  举报