【题解】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 ...
随机推荐
- vue 3d轮播组件 vue-carousel-3d
开发可视化项目时,需要3d轮播图,找来找去发现这个组件,引用简单,最后实现效果还不错.发现关于这个组件,能搜到的教程不多,就分享一下我的经验. 插件github地址:https://wlada.git ...
- jq与js的写法,示例回到顶部div滚动显示隐藏
jq:var top_icon = $('.top_icon')[0]; id写法$('#id'),类写法$('.class'),标签写法$('div') 如:join=document.getEle ...
- JavaScript & 6小时了解ES6基本语法
一步一步似爪牙. 前言 学习es6之前我们可能并不知道es6相比es5差距在哪, 但是这并不妨碍我们站在巨人的肩膀上; 程序员就是要乐于尝鲜; 学习es6最终目的是结合es5 一起进行工程项目开发, ...
- sql语句中 left join,right join,inner join 的区别
看到了sql,发现好久没写sql甚是想念哈哈哈哈,好多当时学的东西都忘了,当时总结的好多的文档也怎么都找不到了..... 言归正传,找到了一张图感觉描述的还挺清晰,先贴图,再说说自己的理解. 1.LE ...
- echarts中boundaryGap属性
boundaryGap:false boundaryGap:true 代码处: xAxis: { type: "category", data: ["06-01" ...
- Blazor组件自做七 : 使用JS隔离制作定位/持续定位组件
1. 运行截图 演示地址 2. 在文件夹wwwroot/lib,添加geolocation子文件夹,添加geolocation.js文件 本组件主要是调用浏览器两个API实现基于浏览器的定位功能,现代 ...
- python---用顺序表实现队列
class Queue(object): """队列""" def __init__(self): self.__list = [] def ...
- IDEA出现Error during artifact deployment. See server log for details.
第一步查看配置 然后点击Web Application Exploded->from Module, 如果以上问题都不存在,则要检查lib下是否缺少相应的jar包,是否导入,是否jar包过多产生 ...
- 20220406Java
记个笔记 字符串操作类中s1.compareTo(s)规则: Compares two strings lexicographically. The comparison is based on th ...
- oracle执行sql查询语句出现错误ORA-00942:表或视图不存在
情况是这样,A库的用户名和表空间分别为SH , SH 把业务表SH所有数据从A库,导入到B库, 表空间为SH,用户名为SP 在B库里面执行sql查询语句出现错误ORA-00942:表或视图不存在 语句 ...