【题解】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 ...
随机推荐
- Samba通过Openldap统一认证
1.环境准备1.1.实验环境[root@moban ~]# cat /etc/redhat-releaseCentOS release 6.8 (Final)[root@moban ~]# uname ...
- centos 后台 运行jar包方法
后台运行jar包方法: 1.nohup java -jar shareniu.jar & nohup意为后台不挂断运行,与是否账号退出无关 2.nohup java -jar shareniu ...
- 比较数字范围:判断number存在(minRange ~ maxRange)范围中
一.使用场景 当需要比较范围时 如: 这种情况,如果要写三个表达式会很长,这时候就可以用这个工具类进行比较 number:用户输入(长,宽,高) minRange: 0.0 maxRange:33 二 ...
- 解决Project出来的问题
问题显现: 解决办法: 恢复默认布局
- BMZCTF SDNISC2020_过去和现在
SDNISC2020_过去和现在 打开附件就一张图片 根据题意感觉是图片中隐藏了什么信息 使用binwalk -e分离这里foremost不行 三个文件查看在第一个中发现flag
- 18个基于 HTML5 Canvas 开发的图表库
如今,HTML5 可谓如众星捧月一般,受到许多业内巨头的青睐.很多Web开发者也尝试着用 HTML 5 来制作各种各样的富 Web 应用.HTML 5 规范引进了很多新特性,其中之一就是 Canvas ...
- CSS简单样式练习(二)
运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...
- css3种不知道宽高的情况下水平垂直居中的方法
第一种:display:table-cell 组合使用display:table-cell和vertical-align.text-align,使父元素内的所有行内元素水平垂直居中(内部div设置di ...
- 创建可以运行宿主机GPU的容器
1.安装NVIDIA Container Runtime apt-get参考https://blog.csdn.net/li_ellin/article/details/107180516 yum参考 ...
- python基本数据类型介绍
数据类型 首先知道什么是数据类型 针对不同的数据类型采用不同的处理方法 --目录-- 一.数据类型之整型 二.数据类型之浮点型 三.数据类型之字串符 四.数据之列表 一.数据类型之整型 1.其实呢就是 ...