【题解】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 ... 
随机推荐
- Postgres数据库知识点
			1.批量插入: test_list = []for i in range(100): test_list.append(models.Testmodel(name=i, message="{ ... 
- Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
			Redisson.Jedis.lettuce 等等,官方推荐使用 Redisson. 
- Spring Data Jpa使用QueryDsl接口出现的一些问题
			1.QuerydslPredicateExecutor当实现此接口时,如果出现什么什么类没有找到的时候,请确认相关的querydsl依赖是否已经添加到maven依赖中 <dependency&g ... 
- SQLyog创建数据库过程
			点击数据库,点击创建数据库 输入数据库名称,输入字符集,排序规则选默认的 然后一个数据库就建好了 
- ACM - 最短路 - AcWing 849 Dijkstra求最短路 I
			AcWing 849 Dijkstra求最短路 I 题解 以此题为例介绍一下图论中的最短路算法.先让我们考虑以下问题: 给定一个 \(n\) 个点 \(m\) 条边的有向图(无向图),图中可能存在重边 ... 
- js技术之循环for
			案例:把所有单词以空格为分割并将首字母转为大写 <!DOCTYPE html><html lang="en"><head> <meta c ... 
- 错误问题之“Apache  Log4j 漏洞,在版本为包含2.14以内!”
			漏洞概述 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器. Log4j 1.2 中包含一个 SocketServer 类,该类容易受到不可信数据反序列化的影响,当侦听 ... 
- Three.js 实现3D开放世界小游戏:阿狸的多元宇宙 🦊
			声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 2545光年之外的开普勒1028星系,有一颗色彩斑斓的宜居星球 ,星际移民 ... 
- 『现学现忘』Docker基础 — 37、ONBUILD指令介绍
			目录 1.ONBUILD指令说明 2.演示ONBUILD指令的使用 3.补充:crul命令解释 1.ONBUILD指令说明 ONBUILD是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COP ... 
- Python的数据基础库Numpy怎样对数组进行排序
			Numpy怎样对数组排序 Numpy给数组排序的三个方法: numpy.sort:返回排序后数组的拷贝 array.sort:原地排序数组而不是返回拷贝 numpy.argsort:间接排序,返回的是 ... 
