题目链接

题目分析

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网络连接的更多相关文章

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

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

  2. Win10搭建Linux开发环境之网络连接设定

    一直想在家自己搭建一个LINUX服务器,好在上面安装个ORACLE数据库玩玩. 上次用了Ubuntu,结果ORACLE没装成功,现在换个思路,采用CentOS 7作为Linux服务器, 之后再进行构建 ...

  3. 【虚拟机】在VMware中安装Server2008之后配置网络连接的几种方式

    VMware虚拟机的网络连接方式分为三种:桥接模式.NAT模式.仅主机(Host Only) (1)桥接模式 桥接模式即在虚拟机中虚拟一块网卡,这样主机和虚拟机在一个网段中就被看作是两个独立的IP地址 ...

  4. 网络连接详细信息出现两个自动配置ipv4地址

    问题:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法:先将本地连接ip设置成自动获取,然后点击开始——>运行——>输入cmd,回车,进入命令行界面 ...

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

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

  6. VMware Workstation中网络连接之桥接、NAT和Host-only

    在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network ...

  7. [转]ping检测网络连接异常

    转载地址:http://blog.csdn.net/feizxiang3/article/details/26672781 一般来说当出现网络无法连接时,习惯性的用ping命令来ping某个ip地址, ...

  8. Android网络连接判断与处理

    博客分类: Android 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android ...

  9. WebView 的使用----android 网络连接处理分析

    在Android中,可以有多种方式来实现网络编程: 创建URL,并使用URLConnection/HttpURLConnection 使用HttpClient 使用WebView 创建URL,并使用U ...

随机推荐

  1. Postgres数据库知识点

    1.批量插入: test_list = []for i in range(100): test_list.append(models.Testmodel(name=i, message="{ ...

  2. Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?

    Redisson.Jedis.lettuce 等等,官方推荐使用 Redisson.

  3. Spring Data Jpa使用QueryDsl接口出现的一些问题

    1.QuerydslPredicateExecutor当实现此接口时,如果出现什么什么类没有找到的时候,请确认相关的querydsl依赖是否已经添加到maven依赖中 <dependency&g ...

  4. SQLyog创建数据库过程

    点击数据库,点击创建数据库 输入数据库名称,输入字符集,排序规则选默认的 然后一个数据库就建好了

  5. ACM - 最短路 - AcWing 849 Dijkstra求最短路 I

    AcWing 849 Dijkstra求最短路 I 题解 以此题为例介绍一下图论中的最短路算法.先让我们考虑以下问题: 给定一个 \(n\) 个点 \(m\) 条边的有向图(无向图),图中可能存在重边 ...

  6. js技术之循环for

    案例:把所有单词以空格为分割并将首字母转为大写 <!DOCTYPE html><html lang="en"><head> <meta c ...

  7. 错误问题之“Apache Log4j 漏洞,在版本为包含2.14以内!”

    漏洞概述 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器. Log4j 1.2 中包含一个 SocketServer 类,该类容易受到不可信数据反序列化的影响,当侦听 ...

  8. Three.js 实现3D开放世界小游戏:阿狸的多元宇宙 🦊

    声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 2545光年之外的开普勒1028星系,有一颗色彩斑斓的宜居星球 ,星际移民 ...

  9. 『现学现忘』Docker基础 — 37、ONBUILD指令介绍

    目录 1.ONBUILD指令说明 2.演示ONBUILD指令的使用 3.补充:crul命令解释 1.ONBUILD指令说明 ONBUILD是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COP ...

  10. Python的数据基础库Numpy怎样对数组进行排序

    Numpy怎样对数组排序 Numpy给数组排序的三个方法: numpy.sort:返回排序后数组的拷贝 array.sort:原地排序数组而不是返回拷贝 numpy.argsort:间接排序,返回的是 ...