P7911 网络连接 题解

Phizo Lv1

虽然本人没有参加今年 ,但是有幸参加了 (挂得很惨)

所以本蒟蒻就来 组水篇题解了。

本题不难,按照题意模拟即可。

大致思路就是:

  1. 读入类型()与

  2. 判断 是否合法:如果不合法,输出 continue,否则继续。

  3. 如果类型是 ,则在已连接的 中查询是否已存在本次需要建立的连接,如果是,则输出 ,否则输出
    如果类型是 ,则在已连接的 中查询是否已存在本次需要加入的连接,如果是,则输出对应的 的编号,否则输出

对于在已建立的连接中进行查询的操作,使用 unordered_map<string, int> 来维护即可(具体实现见代码)。

对于判断 是否合法的方法,由于本人太菜,只能单独对每种不合法的情况进行判断:

  1. 的第 个字符不为数字;
  2. 的第 个字符为 ,且第 个字符为数字;
  3. 的最后 个字符不为数字;
  4. 中“:”之前的“.”的个数不足 个;
  5. 中“.”的个数不为 个;
  6. 中“:”的个数不为 个;
  7. 中某个“.”之后的第 个字符不为数字;
  8. 中某个“.”之后的第 个字符为 ,且第 个字符为数字;
  9. 中“:”之后的第 个字符不为数字;
  10. 中“:”之后的第 个字符为 ,且第 个字符为数字;
  11. 包含除数字,“.”与“:”之外的字符;
  12. 中某个数字超出范围。

希望这篇题解对你有帮助!_(:3」∠)_

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <bits/stdc++.h>
using namespace std;

unordered_map<string, int> ha;

char op[9];

string ip;

inline bool valid(string &ip) {
long long a = 0, b = 0, c = 0, d = 0, e = 0, len = ip.length(), c1 = 0, c2 = 0; // c1 表示“.”的个数,c2 表示“:”的个数
if (ip[0] < '0' || ip[0] > '9') {
return false;
}
if (ip[0] == '0' && ip[1] >= '0' && ip[1] <= '9') {
return false;
}
if (ip[len - 1] < '0' || ip[len - 1] > '9') {
return false;
}
for (int i = 0; i < len; i++) {
if (ip[i] >= '0' && ip[i] <= '9') {
if (c1 < 3 && c2) {
return false;
}
if (c1 == 0) {
a *= 10;
a += ip[i] - '0';
} else if (c1 == 1) {
b *= 10;
b += ip[i] - '0';
} else if (c1 == 2) {
c *= 10;
c += ip[i] - '0';
} else if (c1 == 3) {
if (c2 == 0) {
d *= 10;
d += ip[i] - '0';
} else if (c2 == 1) {
e *= 10;
e += ip[i] - '0';
} else {
return false;
}
} else {
return false;
}
} else if (ip[i] == '.') {
c1++;
if (ip[i + 1] < '0' || ip[i + 1] > '9') {
return false;
}
if (i < len - 2 && ip[i + 1] == '0' && ip[i + 2] >= '0' && ip[i + 2] <= '9') {
return false;
}
} else if (ip[i] == ':') {
c2++;
if (ip[i + 1] < '0' || ip[i + 1] > '9') {
return false;
}
if (i < len - 2 && ip[i + 1] == '0' && ip[i + 2] >= '0' && ip[i + 2] <= '9') {
return false;
}
} else {
return false;
}
}
return a >= 0 && a <= 255 && b >= 0 && b <= 255 && c >= 0 && c <= 255 && d >= 0 && d <= 255 && e >= 0 && e <= 65535 && c1 == 3 && c2 == 1;
}

int n;

int main() {
freopen("network.in", "r", stdin);
freopen("network.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%s", op);
cin >> ip;
if (!valid(ip)) {
puts("ERR");
continue;
}
if (op[0] == 'S') {
if (!ha.count(ip)) {
ha[ip] = i;
puts("OK");
} else {
puts("FAIL");
}
} else {
if (ha.count(ip)) {
printf("%d\n", ha[ip]);
} else {
puts("FAIL");
}
}
}
return 0;
}
  • 标题: P7911 网络连接 题解
  • 作者: Phizo
  • 创建于 : 2021-11-03 21:29:06
  • 更新于 : 2024-10-23 10:16:01
  • 链接: https://phizone.cn/2021/11/03/oi-p7911/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
目录
P7911 网络连接 题解