【题解】2021CSP-J2T3网络连接
题目链接
题目分析
map不会冲突!!不一定要like代码中那样加-号!
模拟,算不上大,
首先,我们想想整个流程:
现在,我们找出难点,逐个瓦解:
- 读入提取数 MIDDLE
- 非法情况判断 HARD
- 是否重复 EASY
从简到难解决。
是否重复
首先,将5个数字按次序组合成一个大数,
本人测试:25525525525565535是long long存的下的,
然后map搞定。
就解决了,参考代码:
long long sum=0;
sum+=a;
sum*=1000;
sum+=b;
sum*=1000;
sum+=c;
sum*=1000;
sum+=d;
sum*=100000;
sum+=e;//转换
if(s=="Server")
{
if(m[-sum])
{
cout<<"FAIL"<<endl;
continue;
}
m[-sum]=T;//记录这个服务机的编号,后边客户机要用
cout<<"OK"<<endl;
}
else
{
if(!m[-sum])
{
cout<<"FAIL"<<endl;
continue;
}
cout<<m[-sum]<<endl;//输出服务机的编号
}
读入提取数
怎么提取数字呢?
其实也不难,
scanf支持格式输入,
如
scanf("%d.%d.%d.%d:%d",&a,&b,&c,&d,&e)
输入
1.1.1.1:1
\(a=1,b=1,c=1,d=1,e=1\)
如果不按格式?
1:1:1:1.1
\(a=1,b=0,c=0,d=0,e=0\)
What?不按格式的部分值没有变化?
问题三有头绪了呢....
非法情况判断
通过如上方案,我们将五个数初始化为-1,
如果格式输入后有-1,那格式有误,非法。
参考代码:
a=-1,b=-1,c=-1,d=-1,e=-1;
cin>>s;
scanf("%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);
if(a==-1||b==-1||c==-1||d==-1||e==-1)
{
cout<<"ERR"<<endl;
continue;
}
同样的,判断数字是否超出范围:
if(a>255||b>255||c>255||d>255||e>65535)
{
cout<<"ERR"<<endl;
continue;
}
你可能会问,如果输入了一个巨大的数,
long long溢出,怎么办?
别急,我们往下看。
前导零问题如何解决??
我们想想,因为前导零被变量“吃”了,
现在的字符串一定比之前的字符串短,
我们判断即可。
怎么存下之前的字符串?
使用sscanf
sscanf
不同于scanf
,它需要多一个字符串参数
相当于用scanf将字符串内容读了一遍,
读入效果与scanf
一样
这样,我们先读入一个字符串,
然后sscanf
读入,
这样两个结果都存了下来,
鱼和熊掌的兼得。
a=-1,b=-1,c=-1,d=-1,e=-1;
cin>>s;
cin>>cc;//sscanf的妙用
sscanf(cc,"%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);
if(a==-1||b==-1||c==-1||d==-1||e==-1)
{
cout<<"ERR"<<endl;
continue;
}
if(a>255||b>255||c>255||d>255||e>65535)
{
cout<<"ERR"<<endl;
continue;
}
if(len(a)+len(b)+len(c)+len(d)+len(e)+4!=strlen(cc))
{//len是一个判断数字长度的自定义函数
//+4是四个标点符号
cout<<"ERR"<<endl;
continue;
}
其实,非法情况就都可以判走了,
因为
- 前导零、整数超出、格式错误被判掉。
- 多个数字显然长度不等。
- long long 溢出,长度变小了。
好了,这道题其实不难,重点在函数使用的基本功。
参考代码
#include<bits/stdc++.h>
using namespace std;
map<long long,int> m;
int n,a,b,c,d,e;
string s,s2;
char cc[105];
int len(int x)
{
if(x==0)return 1;
int ans=0;
while(x)
{
ans++;
x/=10;
}
return ans;
}
int main()
{
cin>>n;
for(int T=1;T<=n;T++)
{
a=-1,b=-1,c=-1,d=-1,e=-1;
cin>>s;
cin>>cc;
sscanf(cc,"%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);
if(a==-1||b==-1||c==-1||d==-1||e==-1)
{
cout<<"ERR"<<endl;
continue;
}
if(a>255||b>255||c>255||d>255||e>65535)
{
cout<<"ERR"<<endl;
continue;
}
if(len(a)+len(b)+len(c)+len(d)+len(e)+4!=strlen(cc))
{
cout<<"ERR"<<endl;
continue;
}
long long sum=0;
sum+=a;
sum*=1000;
sum+=b;
sum*=1000;
sum+=c;
sum*=1000;
sum+=d;
sum*=100000;
sum+=e;
if(s=="Server")
{
if(m[-sum])
{
cout<<"FAIL"<<endl;
continue;
}
m[-sum]=T;
cout<<"OK"<<endl;
}
else
{
if(!m[-sum])
{
cout<<"FAIL"<<endl;
continue;
}
cout<<m[-sum]<<endl;
}
}
}
END
【题解】2021CSP-J2T3网络连接的更多相关文章
- VMware的三种网络连接方式区别
关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三 ...
- Win10搭建Linux开发环境之网络连接设定
一直想在家自己搭建一个LINUX服务器,好在上面安装个ORACLE数据库玩玩. 上次用了Ubuntu,结果ORACLE没装成功,现在换个思路,采用CentOS 7作为Linux服务器, 之后再进行构建 ...
- 【虚拟机】在VMware中安装Server2008之后配置网络连接的几种方式
VMware虚拟机的网络连接方式分为三种:桥接模式.NAT模式.仅主机(Host Only) (1)桥接模式 桥接模式即在虚拟机中虚拟一块网卡,这样主机和虚拟机在一个网段中就被看作是两个独立的IP地址 ...
- 网络连接详细信息出现两个自动配置ipv4地址
问题:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法:先将本地连接ip设置成自动获取,然后点击开始——>运行——>输入cmd,回车,进入命令行界面 ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)
时间一点点的消逝,伴着自己空闲日子将要结束的时候我尽量的学习和分享场景和AI的知识给朋友们,不过很遗憾的是这些文章还有不足的地方,就是有的难点没有完全的分析到.掉落在游戏中必不可少的,同时网络连接也是 ...
- VMware Workstation中网络连接之桥接、NAT和Host-only
在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network ...
- [转]ping检测网络连接异常
转载地址:http://blog.csdn.net/feizxiang3/article/details/26672781 一般来说当出现网络无法连接时,习惯性的用ping命令来ping某个ip地址, ...
- Android网络连接判断与处理
博客分类: Android 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android ...
- WebView 的使用----android 网络连接处理分析
在Android中,可以有多种方式来实现网络编程: 创建URL,并使用URLConnection/HttpURLConnection 使用HttpClient 使用WebView 创建URL,并使用U ...
随机推荐
- 转:红黑树和AVL树(平衡二叉树)区别
本文转载至链接:https://blog.csdn.net/u010899985/article/details/80981053 一.AVL树(平衡二叉树) (1)简介 AVL树是带有平衡条件的二叉 ...
- 设备像素,CSS像素,设备独立像素
1.概念 设备像素(device pixel)简写DP 设备像素又称 **物理像素** ,是设备能控制显示的最小单位,我们可以把它看做显示器上的一个点.我们常说的 1920x1080像素分辨率就是用的 ...
- 媒体查询@media的使用
媒体查询 参考:https://developer.mozilla.org...一个媒体查询由一个可选的媒体类型和零个或多个使用媒体功能的限制了样式表范围的表达式组成,例如宽度.高度和颜色.媒体查询, ...
- Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 报错及解决办法
亲测Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 解决办法 - 程序员大本营 ...
- springMVC中获取request和response对象的几种方式(RequestContextHolder)
springMVC中获取request和response对象的几种方式 1.最简单方式:参数 2.加入监听器,然后在代码里面获取 原文链接:https://blog.csdn.net/weixin_4 ...
- IDEA小技巧:Debug拖动跳转任意行
昨天分享了一个在IDEA中为Debug断点添加条件的小技巧.今天继续分享一个Debug过程中非常实用的小插件. 插件名字叫Jump To Line: 安装完成之后,你在Debug过程中,会在断点的左边 ...
- docker将jar打包镜像文件
1.首先需要编写dockerfile文件,通过dockerfile文件将jar包打成镜像 编写dockerfile文件 # 定义父镜像 FROM java:8 # 维护者信息 MAINTAINER c ...
- 函数.python
今日内容概要 名称空间 名字的查找顺序 作用域 global与nonlocal关键字 函数名对象 函数的嵌套 今日内容详细 1.名称空间 #名称空间其实就是存放变量名与变量名绑定关系的地方#分类1.内 ...
- vue3 监听路由($route)变化
setup() { // ... }, watch: { $route(m, n) { console.log('mm', m) console. ...
- canvas 隐藏 踩坑
当我在把canvas绘制完成时,要把canvas隐藏起来.试了display 和 opacity 都不行. 然后我用了 position: absolute; left:1000px; top:0; ...