Content

题目过于难解释,请前往题面查看。以下直接给出本题做法。

Solution

入门组 T3 在我印象中向来都不是很容易能做出来的题目,但是今年这个 T3 不得不说还是挺好做的。

我们先不妨令它给出的地址串是合法的,也就是测试点 \(1\sim 11\) 的特殊性质,我们直接用个 map 来存储每个地址串是否已有服务器建立连接,即可解决判断地址串是否已经在前面有服务机建立连接的这个问题,同时对于客户机,这也同样可以判断是否有建立连接的服务机供其连接。

这样,判断给出的地址串是否合法就变成了我们接下来要重点解决的问题。

我们回到题面看看不合法的字符串可能是什么样的:

不是形如 a.b.c.d:e 格式的字符串,例如含有多于 \(3\) 个字符 . 或多于 \(1\) 个字符 : 等情况。

整数 \(a,b,c,d,e\) 中某一个或多个超出上述范围(即 \(0\leqslant a,b,c,d\leqslant 255\),\(0\leqslant e\leqslant 65535\));

整数 \(a,b,c,d,e\) 中某一个或多个含有多余的前导 \(0\)。

我们根据每个特点将其转化成代码语言。

首先对于不是形如 a.b.c.d;e 格式的地址串,我们直接扫一遍判断其是否恰好有 \(3\) 个 . 和 \(1\) 个 . 即可。同时,我们将第一个 . 前面的部分、第一个 . 和第二个 . 之间的部分、第二个 . 和第三个 . 之间的部分、第三个 .: 之间的部分、: 后面的部分分别提取出来,将字符串的这五个部分分别记作 \(s_1,s_2,s_3,s_4,s_5\)。

之后,对于每个 \(s_i\),我们首先看 \(s_i\) 的首字符是否是 0,然后再去将其转化成数字。在转换的过程中我们需要判断数字是否超出了范围,一旦超出了范围就直接判定其不合法即可。注意,这里之所以在转换的过程中就判断其是否超出范围是因为,如果直接全部转换完再判断,容易超出数据类型范围从而使最终的转换结果不准确。当然地址串的长度不超过 \(\sout{25}\),所以直接用 __int128 是可以保证不爆炸的,但是这里显然不必要用这么大的数据类型去判断一个很小的数字,用上述方法即可仅使用普通的 int 解决是否超出范围的问题而不超出其本身数据类型范围。

这样,判断一个地址串是否合法的过程就全部讲完了。接下来把上面这些部分用代码实现即可。

Code

namespace Solution {
const int N = 1007;
int n;
struct node {string op, ip;}a[N];
map<string, int> id; ib chk(string s) {
int num = 0, fl = 0, sze = s.size(), p[27] = {0};
string nums[7] = {""};
s = " " + s;
F(int, i, 1, sze) {
if(s[i] == '.') {
p[++num] = i;
if(num > 3) return 0;
} else if(s[i] == ':') {
if(!fl) fl = i;
else return 0;
}
}
if(num < 3 || !fl) return 0;
p[++num] = fl, p[++num] = sze;
F(int, i, 1, num) {
F(int, j, p[i - 1] + 1, p[i] - (i != num)) nums[i] += s[j];
if((nums[i].size() != 1 && nums[i][0] == '0') || nums[i] == "") return 0;
ll x = 0;
F(int, j, 0, (int)nums[i].size() - 1) {
x = x * 10 + nums[i][j] - '0';
if(x > (i == num ? 65535 : 255)) return 0;
}
}
return 1;
} iv Main() {
read(n);
F(int, i, 1, n) {
cin >> a[i].op >> a[i].ip;
if(a[i].op == "Server") {
if(!chk(a[i].ip)) puts("ERR");
else if(id[a[i].ip]) puts("FAIL");
else puts("OK"), id[a[i].ip] = i;
} else {
if(!chk(a[i].ip)) puts("ERR");
else if(!id[a[i].ip]) puts("FAIL");
else println(id[a[i].ip]);
}
}
return;
}
}

LuoguP7911 [CSP-J 2021] 网络连接 题解的更多相关文章

  1. CCF CSP 201403-4 无线网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-4 无线网络 问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路 ...

  2. MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)

    时间一点点的消逝,伴着自己空闲日子将要结束的时候我尽量的学习和分享场景和AI的知识给朋友们,不过很遗憾的是这些文章还有不足的地方,就是有的难点没有完全的分析到.掉落在游戏中必不可少的,同时网络连接也是 ...

  3. openstack(liberty): 简单网络连接图

    openstack起初的网络部分是和计算核心nova合在一起的,后来被拆分出来,独立成为一个模块, 现在名为Neutron. 本博文是学习记录,记录的是基于GRE tunnel技术的neutron和计 ...

  4. linux虚拟机网络连接模式 bridged, host-only, NAT

    最近安装了fedora9.0,却一直不能连接到外网,我用的是3G无线网卡上网的,起初以为是linux不支持3G无线方式的,可后来装了虚拟机ubuntu却可以上网,在后来用有ADSL网络连接的电脑安装f ...

  5. Docker容器的网络连接

    Docker容器的网络连接 Docker容器的网络连接 我们用ifconfig命令来查看网络设备 我们可以看到上面有个叫docker0的网络设备,docker守护进程就是通过docker0为docke ...

  6. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

  7. 2021.07.17 题解 CF1385E Directing Edges(拓扑排序)

    2021.07.17 题解 CF1385E Directing Edges(拓扑排序) CF1385E Directing Edges - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ...

  8. CSP J/S 初赛总结

    CSP J/S 初赛总结 2021/9/19 19:29 用官方答案估计 J 涂卡的时候唯一的一支 2B 铅笔坏了,只能用笔芯一个个涂 选择 \(-6\ pts\) 判断 \(-3\ pts\) 回答 ...

  9. VMware的三种网络连接方式区别

    关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三 ...

随机推荐

  1. 语音合成论文翻译:2019_MelGAN: Generative Adversarial Networks for Conditional Waveform Synthesis

    论文地址:MelGAN:条件波形合成的生成对抗网络 代码地址:https://github.com/descriptinc/melgan-neurips 音频实例:https://melgan-neu ...

  2. 一些需要记住的linux命令

    1. 系统帮助命令                      ----man 2. 数据同步写入磁盘               ----sync 3. 查找文件命令                  ...

  3. 洛谷 P6349 - [PA2011]Kangaroos(KDT+标记下放)

    洛谷题面传送门 KDT 上打标记的 hot tea. 考虑将询问 \(A,B\) 看作二维平面直角坐标系上的一个点 \((A,B)\),那么我们这样考虑,我们从左到右扫过全部 \(n\) 个区间并开一 ...

  4. Codeforces 1010F - Tree(分治 NTT+树剖)

    Codeforces 题面传送门 & 洛谷题面传送门 神仙题. 首先我们考虑按照这题的套路,记 \(t_i\) 表示 \(i\) 上的果子数量减去其儿子果子数量之和,那么对于一个合法的放置果子 ...

  5. dotnet 将自动代码格式化机器人带入团队 GitLab 平台

    给团队带入一个 代码格式化机器人 能提升团队的幸福度,让团队的成员安心写代码,不用关注代码格式化问题,将格式代码这个粗活交给机器人去做.同时也能减少在代码审查里撕格式化问题的时间,让更多的时间投入到更 ...

  6. 比对软件Blast,Blast+,Diamond比较

    1. Blast (1)格式化数据库 formatdb -i db.seq -p T -o T -l logfile 主要参数: -i 输入需要格式化的源数据库名称 -p 文件类型,是核苷酸序列数据库 ...

  7. python-django-类函数__str__ 函数

    打印一个实例化对象时,打印的其实时一个对象的地址.而通过__str__()函数就可以帮助我们打印对象中具体的属性值,或者你想得到的东西. 因为再python中调用print()打印实例化对象时会调用_ ...

  8. Python基础之数字类型内置方法

    目录 1. 整型内置方法(int) 2. 浮点型内置方法 3. 常用操作 1. 整型内置方法(int) 用途:年龄,号码,等级等 定义: age = 18 常用操作 # 算数运算.比较运算 age = ...

  9. keybd_event模拟键盘按键,mouse_event怎么用

    从 模仿UP主,用Python实现一个弹幕控制的直播间! - 蛮三刀酱 - 博客园 (cnblogs.com) 知道了 PyAutoGUI: * Moving the mouse and clicki ...

  10. A Child's History of England.28

    By such means, and by taxing and oppressing the English people in every possible way, the Red King b ...