题目链接

题目分析

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. 用 Java 实现阻塞队列 ?

    参考 java 中的阻塞队列的内容吧,直接实现有点烦

  2. rbac-基于角色的权限控制系统(8种常用场景再现)

    首先要抛出的问题是在代码世界里什么是权限? url就代表权限 如何实现权限控制? 下面详细介绍控制流程 1.1简单权限控制--表结构 简单权限控制,三个model,五张表 权限表permission ...

  3. BMZCTF ssrfme

    <?php if(isset($_GET) && !empty($_GET)){ $url = $_GET['file']; $path = "upload/" ...

  4. 使用滑模控制对sin(t)曲线追踪

    结合:[Matlab]简单的滑模控制程序及Simulink仿真本片文章观看,此篇文章是在这篇文章的基础上进行修改的 输出u的推导过程 如果不明白控制量输出u的推到过成请看:[控制理论]滑模控制最强解析 ...

  5. transformjs 污染了 DOM?是你不了解它的强大

    原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/Powerful-transformjs 写在前面 上星期在React微信群里,有小伙伴觉得tran ...

  6. python实战----Todo清单续写

    添加分页功能 第一步:是对视图函数的改写,通过查询数据库数据,进行分页显示 # 修改清单显示的视图函数 @app.route('/list/') @app.route('/list/<int:p ...

  7. python爬虫---链家网二手房价采集

    代码: import requests from lxml import etree import pandas as pd from pyecharts.charts import Bar from ...

  8. 【Android开发】富文本

    SpannableString spannableString = new SpannableString("设置文字的前景色为淡蓝色"); ForegroundColorSpan ...

  9. tkinter GUI编程

    tkinter编程概述 tkinter模块包含在Python的基本安装包中.使用tkinter模块编写的GUI程序是跨平台的.可在windows.UNIX.Linux以及Macintonsh OS X ...

  10. Go 1.18泛型的局限性初探

    前言 Go 1.18 版本之后正式引入泛型,它被称作类型参数(type parameters),本文初步介绍 Go 中泛型的使用.长期以来 go 都没有泛型的概念,只有接口 interface 偶尔类 ...