当前位置: 首页 > news >正文

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档回复:20241007

1 P7911 [CSP-J 2021] 网络连接

[题目描述]

TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个协议,还原一个简化后的网络连接场景。

在本问题中,计算机分为两大类:服务机(Server)和客户机(Client)。服务机负责建立连接,客户机负责加入连接

需要进行网络连接的计算机共有 n 台,编号为 1∼n,这些机器将按编号递增的顺序,依次发起一条建立连接或加入连接的操作。

每台机器在尝试建立或加入连接时需要提供一个地址串。服务机提供的地址串表示它尝试建立连接的地址,客户机提供的地址串表示它尝试加入连接的地址

一个符合规范的地址串应当具有以下特征:

必须形如 a.b.c.d:e 的格式,其中 a,b,c,d,e 均为非负整数
0≤a,b,c,d≤255,0≤e≤65535
a,b,c,d,e 均不能含有多余的前导 0

相应地,不符合规范的地址串可能具有以下特征

不是形如 a.b.c.d:e 格式的字符串,例如含有多于3 个字符 . 或多于 1 个字符 : 等情况;
整数a,b,c,d,e 中某一个或多个超出上述范围
a,b,c,d,e 中某一个或多个含有多余的前导0

例如,地址串 192.168.0.255:80 是符合规范的,但 192.168.0.999:80192.168.00.1:10192.168.0.1:088192:168:0:1.233 均是不符合规范的

如果服务机或客户机在发起操作时提供的地址串不符合规范,这条操作将被直接忽略。

在本问题中,我们假定凡是符合上述规范的地址串均可参与正常的连接,你无需考虑每个地址串的实际意义。

由于网络阻塞等原因,不允许两台服务机使用相同的地址串,如果此类现象发生,后一台尝试建立连接的服务机将会无法成功建立连接;除此之外,凡是提供符合规范的地址串的服务机均可成功建立连接。

如果某台提供符合规范的地址的客户机在尝试加入连接时,与先前某台已经成功建立连接的服务机提供的地址串相同,这台客户机就可以成功加入连接,并称其连接到这台服务机;如果找不到这样的服务机,则认为这台客户机无法成功加入连接。

请注意,尽管不允许两台不同的服务机使用相同的地址串,但多台客户机使用同样的地址串,以及同一台服务机同时被多台客户机连接的情况是被允许的。

你的任务很简单:在给出每台计算机的类型以及地址串之后,判断这台计算机的连接情况

[输入格式]

第一行,一个正整数 n

接下来 n行,每行两个字符串 op,ad,按照编号从小到大给出每台计算机的类型及地址串

其中 op 保证为字符串 ServerClient 之一,ad 为一个长度不超过 25 的,仅由数字、字符 . 和字符 : 组成的非空字符串。

每行的两个字符串之间用恰好一个空格分隔开,每行的末尾没有多余的空格

[输出格式]

输出共 n 行,每行一个正整数或字符串表示第 i台计算机的连接状态。其中:

如果第 i台计算机为服务机,则:

如果其提供符合规范的地址串且成功建立连接,输出字符串 OK。
如果其提供符合规范的地址串,但由于先前有相同地址串的服务机而无法成功建立连接,输出字符串 FAIL。
如果其提供的地址串不是符合规范的地址串,输出字符串 ERR。

如果第 i 台计算机为客户机,则:

如果其提供符合规范的地址串且成功加入连接,输出一个正整数表示这台客户机连接到的服务机的编号。
如果其提供符合规范的地址串,但无法成功加入连接时,输出字符串 FAIL。
如果其提供的地址串不是符合规范的地址串,输出字符串 ERR

[输入输出样例]

输入 #1

5
Server 192.168.1.1:8080
Server 192.168.1.1:8080
Client 192.168.1.1:8080
Client 192.168.1.1:80
Client 192.168.1.1:99999

输出 #1

OK
FAIL
1
FAIL
ERR

输入 #2

10
Server 192.168.1.1:80
Client 192.168.1.1:80
Client 192.168.1.1:8080
Server 192.168.1.1:80
Server 192.168.1.1:8080
Server 192.168.1.999:0
Client 192.168.1.1.8080
Client 192.168.1.1:8080
Client 192.168.1.1:80
Client 192.168.1.999:0

输出 #2

OK
1
FAIL
FAIL
OK
ERR
ERR
5
1
ERR

说明/提示

计算机 1 为服务机,提供符合规范的地址串 192.168.1.1:8080,成功建立连接;

计算机 2为服务机,提供与计算机 1 相同的地址串,未能成功建立连接;

计算机 3 为客户机,提供符合规范的地址串 192.168.1.1:8080,成功加入连接,并连接到服务机 1;

计算机 4为客户机,提供符合规范的地址串 192.168.1.1:80,找不到服务机与其连接;

计算机 5 为客户机,提供的地址串 192.168.1.1:99999 不符合规范

数据规模

对于 100% 的数据,保证 1≤n≤1000

2 相关知识点

1) 字符串

find函数

s.find(str) 查找字符串str在当前字符串s中第一次出现的位置 从0开始

#include<bits/stdc++.h>
using namespace std;
/*
s.find(str) 查找字符串str在当前字符串s中第一次出现的位置 从0开始 
*/
int main(){string str = "The apple thinks apple is delicious";//长度34string key = "e";int pos = str.find(key);// 2cout<<"e在字符串第1次出现的位置:"<<pos<<endl;key = "apple";pos = str.find(key);// 4cout<<"apple在字符串第1次出现的位置:"<<pos<<endl;return 0;
}
/*
输出
e在字符串第1次出现的位置:2
apple在字符串第1次出现的位置:4 
*/ 

substr函数

在C++中可以使用 substr ,成员函数来获取子字符串

str.substr(1,5) 从第一个位置开始 取5个字符
str.substr(1) 从第一个位置开始 取到结尾的所有字符

#include<bits/stdc++.h>
using namespace std;
/*子串 substr str.substr(1,5) 从第一个位置开始 取5个字符str.substr(1) 从第一个位置开始 取到结尾的所有字符 
*/ 
void test8(){string str="abcdefg";cout<<str<<endl;string temp=str.substr(1,5);//bcdefcout<<temp<<endl;temp = str.substr(1);//bcdefgcout<<temp<<endl;
} 
int main(){test8(); return  0;
}
/*
输出
abcdefg
bcdef
bcdefg
*/

2) 数据结构Map

C++中的std::map是一个关联容器,它存储键值对,并根据键对元素进行排序。std::map中的键是唯一的,而值可以重复。std::map通常使用红黑树实现,因此插入、删除和查找操作的时间复杂度为O(log n)

#include<bits/stdc++.h>
using namespace std;
map<string,int> mp;
/*
如果通过数字获取对应数据,比如通过学号获取学生姓名
比如string[5]={"张三","李四"},a[0] 
如果通过字符串获取,可以使用map结构 
map<string,int> mp;
key为string value为int
*/ 
int main(){mp["张三"]=2;mp["李四"]=8;cout<<"张三的学号是:"<<mp["张三"]<<endl;cout<<"李四的学号是:"<<mp["李四"];return 0;
}
/*
张三的学号是:2
李四的学号是:8
*/

3) 数据溢出

在C语言中,数据溢出是指变量在进行计算或赋值操作时超出了其数据类型所能表示的范围,导致结果不正确或不可预料的行为

例如

#include<bits/stdc++.h>
using namespace std;
int main(){char c=129;//超出了char 表示的数值范围 char最大是127printf("%d",c); return 0;
} 
/*
输出
-127 
*/

3 思路分析

1 判断地址是否合法判断.和:是否在固定位置使用find和substr函数截取分割出的数组,判断是否在对应范围内
2 判断服务器是否可以创建使用map数据结构,存储已创建的服务端,如果地址未创建过,可以创建,如果已经创建过,则不能创建
3 判断客户端是否可以加入加入对应服务器地址,如果要加入的地址创建成功,则可以加入,输出对应服务器编号如果加入的服务端,未创建成功,则输出FAIL

示例程序

#include<bits/stdc++.h>
using namespace std;
int n;//输入n个地址 
string op,ad;//op 计算机类型 ad计算机地址 
/*
服务器地址和编号映射
key为服务器地址 ,value为服务器编号
通过地址 key可以获取启动服务服务器编号 
*/ 
map<string,int> serverMap;
/*字符串转整形按位逐一转换 自动去除前导0 使用long long数据类型 是因为有些数字过大,超出了int的范围
*/
long long s2i(string s){long long ret=0;for(int i=0;i<s.length();i++){ret = ret*10+s[i]-'0';}return ret;
}
/*判断服务器地址是否合法 合法返回true 不合法返回false 
*/
bool check(string s){//cnt1记录字符.的个数 cnt2 记录字符:的个数 int cnt1=0,cnt2=0; for(int i=0;i<s.length();i++){if(s[i]=='.') cnt1++;//遇到累加 if(s[i]==':') cnt2++;//遇到累加if(cnt2==1 && cnt1!=3){//:有1个时 .必须有3个 否则不合法 return false;}}if(cnt1!=3 || cnt2!=1){//.不是3个 :不是1个都不合法 return false;}//pos 第1个.或:的位置,i通过.或: 分割出来的字符下标 int pos,i; string str[10];//分割出来字符存放str中 for(i=0;i<3;i++){pos = s.find(".");//找到第1个.的位置 str[i]=s.substr(0,pos);//截取.前面字符 s=s.substr(pos+1);//去除原字符.前面字符并去除. }pos = s.find(":");//继续找:位置 str[i]=s.substr(0,pos);//截取:前面字符 str[++i]=s.substr(pos+1);//截取:后面字符 for(int i=0;i<5;i++){//上面操作截取5个字符 放入str数组中//截取字符为空 不合法   if(str[i].length()==0) return false;//有前导0 不合法 if(str[i][0]=='0' && str[i].length()>1) return false;//字符串转数字 可能存在不合法数字范围超出int long long tmp=s2i(str[i]);if(i==4){//最后一个端口 范围判断 0~65535之间,超出不合法 if(tmp<0 || tmp>65535){return false;}}else{//地址每个数,范围判断0~255之间,超出不合法 if(tmp<0 || tmp>255){return false;}}}return true;//前面没有不合法退出,走到这里返回合法 
}int main(){cin>>n;//输入计算机个数 for(int i=1;i<=n;i++){cin>>op>>ad;//输入操作类型和计算机地址 if(!check(ad)){//如果不合法 输出ERR cout<<"ERR"<<endl;continue;//继续判断下1个 }if(op=="Server"){//如果是服务器 if(serverMap[ad]==0){//此服务器没建立过连接 cout<<"OK"<<endl;//输出OK serverMap[ad]=i;//记录此服务器地址的编号 }else{//此服务器已建立过连接 cout<<"FAIL"<<endl;//输出FAIL }}else{//客户端 if(serverMap[ad]){//加入的服务器已建立连接 cout<<serverMap[ad]<<endl;//输出连接服务器编号 }else{//加入服务器还没建立连接 cout<<"FAIL"<<endl;//无法加入 输出FAIL }	}}return 0;
} 

相关文章:

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档回复:20241007 1 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务&#xff0c;就是尝试利用这个协议&#xff0c;还原一个简化后的网络连接场景。 在本问题中&#xff0c;计算机分为两大类&#xff1a;服务机&#x…...

Allegro如何合并同名网络铜皮操作指导

Allegro如何合并同名网络铜皮操作指导 Allegro可以将同名网络的铜皮合并起来&#xff0c;如下图&#xff0c;需要把下面两块铜皮合并成一块铜皮 具体操作如下 选择Shape 选择merge shapes Find选择shapes 点击其中一块铜皮&#xff0c;会被亮起来 再点击另外一块铜皮 两块铜皮…...

【探测器】线阵相机中的 TDI 技术

【探测器】线阵相机中的 TDI 技术 1.背景2.TDI相机3.场景应用 1.背景 TDI 即Time Delay Integration时间延迟积分。 TDI相机是线阵相机的一种特殊类型&#xff0c;带有独特的时间延迟积分&#xff08;TDI&#xff09;技术。 换句话说&#xff0c;TDI相机是线阵相机的一个高级版…...

k8s 之安装metrics-server

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/01/29 18:25 metrics-server可帮助我们查看pod的cpu和内存占用情况 kubectl top po nginx-deploy-56696fbb5-mzsgg # 报错&#xff0c;需要Metrics API 下载 Metrics 解决 wget https://github.com/kubernetes-sigs/metri…...

java学习-idea编辑器基础使用设置

首先打开电脑中的idea编辑器&#xff0c;点击头部&#xff1a;File按钮 → Settings… 打开设置界面&#xff1b; 设置idea的主题 设置idea代码注释的字体颜色 设置idea编辑器的字体和字体大小 设置idea通过提示回车自动导入包 设置idea输入忽略大小写进行提示...

PDSCH(物理下行共享信道)简介

文章目录 PDSCH&#xff08;物理下行共享信道&#xff09;简介1. Transport block CRC attachment2. LDPC base graph selection3. Code block segmentation And Code Block CRC Attachment4. Channel Coding5. Rate Matching6. Code Block Concatenation7. Scrambling8. Modul…...

hutool bug

Hutool参考文档 不用随便升级版本 版本5.8 1&#xff1a; 不要用 ReflectUtil.newInstance(cName); * 和spring 部分框架整合 &#xff0c;子类转换为父类或者接口失败&#xff0c;报转换失败的错误 https://gitee.com/dromara/hutool/issues/I18NCR?skip_mobiletrue 改成使…...

69.x的平方根 367.完全有效的平方数

题目:69. x 的平方根 - 力扣&#xff08;L69eetCode&#xff09; 经典平方根问题&#xff0c;用二分法慢慢逼近找开方值&#xff0c;注意mid*mid要用long long值&#xff0c;不然会溢出 class Solution { public:int mySqrt(int x) {int left 0; int right x;int ans -1; w…...

Android Automotive(一)

目录 什么是Android Automotive Android Automotive & Android Android Automotive 与 Android Auto 什么是Android Automotive Android Automotive 是一个基础的 Android 平台,它能够运行预装的车载信息娱乐系统(IVI)应用程序,以及可选的二方和三方 Android 应用程…...

命令设计模式

简介 命令模式&#xff08;Command Pattern&#xff09;是对命令的封装&#xff0c;每一个命令都是一个操作&#xff1a;请求方发出请求要求执行一个操作&#xff1b;接收方收到请求&#xff0c;并执行操作。命令模式解耦了请求方和接收方&#xff0c;请求方只需请求执行命令&…...

探索智能新境界:最好用的AI工具盘点

你用过最好用的AI工具有哪些&#xff1f; 在人工智能技术飞速发展的今天&#xff0c;AI工具正逐渐成为我们工作和生活中不可或缺的助手。它们不仅提高了效率&#xff0c;还为我们提供了创新的解决方案。作为一名对AI充满热情的用户&#xff0c;我有幸体验了许多优秀的AI工具。…...

【Redis】持久化(下)-- AOF

文章目录 AOF概念如何使用AOFAOF工作流程命令写入演示文件同步策略 AOF的重写机制概念触发重写机制AOF重写流程 启动时数据恢复混合持久化总结 AOF 概念 AOF持久化:以独立日志的方式记录每次的写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的.AOF的主要作用是解决…...

用Arduino单片机制作一个简单的音乐播放器

Arduino单片机上有多个数字IO针脚&#xff0c;可以输出数字信号&#xff0c;用于驱动发声器件&#xff0c;从而让它发出想要的声音。蜂鸣器是一种常见的发声器件&#xff0c;通电后可以发出声音。因此&#xff0c;单片机可以通过数字输出控制蜂鸣器发出指定的声音。另外&#x…...

软件工程相关

1.软件过程模型&#xff08;重要&#xff09; 1.1.瀑布模型 只适合需求明确的项目严格串行化&#xff0c;很长时间才能看到结果。严格区分阶段&#xff0c;每个阶段因果紧密相连&#xff0c;且要求每个阶段一次性解决该阶段的任务 1.2.原型模型&#xff08;构造简易模型确定…...

速盾:游戏加速下载可以用cdn吗?

随着互联网的快速发展&#xff0c;游戏下载已经成为许多游戏玩家的常见需求。然而&#xff0c;由于游戏文件体积庞大&#xff0c;下载速度经常成为制约因素之一。为了解决这个问题&#xff0c;许多玩家开始寻找可以加速游戏下载速度的方法。其中一种常见的方法是使用CDN&#x…...

每日新闻掌握【2024年9月25日 星期三】

2024年9月25日 星期三 农历八月廿三 大公司/大事件 央行降低存量房贷利率&#xff0c;二套房贷最低首付比例下调到15% 国务院新闻办公室9月24日上午举行新闻发布会&#xff0c;中国人民银行、金融监管总局、中国证监会主要负责人介绍了金融支持经济高质量发展有关情况。多项重…...

8. Bug 与 Error

计算机程序中的缺陷通常被称为 bug。把它们想象成偶然爬进我们工作中的小东西&#xff0c;会让程序员感觉良好。当然&#xff0c;实际上是我们自己把它们放进去的。 如果程序是思想的结晶&#xff0c;我们可以将错误大致分为思想混乱造成的错误和将思想转化为代码时引入错误造成…...

论文 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust

这篇论文研究了使用提示 (Prompting) 方法微调预训练语言模型&#xff0c;以提高其在对抗样本攻击下的鲁棒性。论文的主要贡献如下&#xff1a; 1.MVP 比 MLP-FT 更鲁棒&#xff1a; 论文比较了 MVP (Model-tuning Via Prompts) 和传统的 MLP-FT (Fine-tuning with an MLP head…...

828华为云征文|华为云Flexus云服务器X实例部署 即时通讯IM聊天交友软件——高性能服务器实现120W并发连接

营运版的即时通讯IM聊天交友系统&#xff1a;特点可发红包&#xff0c;可添加多条链接到用户网站和应用&#xff0c;安卓苹果APPPC端H5四合一 后端开发语言&#xff1a;PHP&#xff0c; 前端开发语言&#xff1a;uniapp混合开发。 集安卓苹果APPPC端H5四合一APP源码&#xff0…...

超好用的element的el-pagination分页组件二次封装-附源码及讲解

前言&#xff1a;在很多后台管理系统开发时总会有很多分页组件的使用&#xff0c;如果我们每次都用elementui官网的el-pagination去写的话&#xff0c;调整所有分页的样式就会很麻烦&#xff0c;而且页面内容也会很累赘繁琐。 讲解一个我经常使用的二次封装el-pagination组件&…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...