首页 > 其他分享 >CSP历年复赛题-P7911 [CSP-J 2021] 网络连接

CSP历年复赛题-P7911 [CSP-J 2021] 网络连接

时间:2024-06-18 17:35:07浏览次数:13  
标签:false int ip P7911 ++ 2021 return CSP dot

原题链接:https://www.luogu.com.cn/problem/P7911

题意解读:服务器server建立连接,客户端client加入连接,建立和加入连接都要指定一个ip地址,对已经建立过连接的ip地址再次建立连接会失败,加入连接没有限制,根据要求进行输出。

解题思路:

此题有两个关键点:

1、验证IP地址的格式是符合规范的,不合规范要输出ERR

2、建立连接时,用map保存已经建立连接的IP地址,用于判断是否存在,如果不存在则建立连接成功并加IP地址和编号加入map,如果存在则FAIL

3、加入连接时,判断IP是否在map中存在,如果存在则输出IP对应的编号,如果不存在则FAIL

100分代码:

#include <bits/stdc++.h>
using namespace std;

int n;
string type, ip;
map<string, int> h;

bool check(string ip)
{
    vector<int> dot; //点号的位置
    vector<int> mao; //冒号的位置
    for(int i = 0; i < ip.size(); i++)
    {
        if(ip[i] == '.') dot.push_back(i);
        if(ip[i] == ':') mao.push_back(i);
    }
    if(dot.size() != 3 || mao.size() != 1) return false;

    //判断a
    int a = 0;
    int l = 0, r = dot[0];
    if(r - l <= 0 || r - l > 3) return false; //a长度不对
    if(ip[l] == '0' && r - l > 1) return false; //a有前导0
    for(int i = l; i < r; i++) 
    {
        if(ip[i] < '0' || ip[i] > '9') return false; //a有非数字字符
        a = 10 * a + ip[i] - '0';
    }
    if(a < 0 || a > 255) return false; //a范围不对

    //判断b
    int b = 0;
    l = dot[0] + 1, r = dot[1];
    if(r - l <= 0 || r - l > 3) return false; //b长度不对
    if(ip[l] == '0' && r - l > 1) return false; //b有前导0
    for(int i = l; i < r; i++) 
    {
        if(ip[i] < '0' || ip[i] > '9') return false; //b有非数字字符
        b = 10 * b + ip[i] - '0';
    }
    if(b < 0 || b > 255) return false; //b范围不对

    //判断c
    int c = 0;
    l = dot[1] + 1, r = dot[2];
    if(r - l <= 0 || r - l > 3) return false; //c长度不对
    if(ip[l] == '0' && r - l > 1) return false; //c长度为0或者有前导0
    for(int i = l; i < r; i++) 
    {
        if(ip[i] < '0' || ip[i] > '9') return false; //c有非数字字符
        c = 10 * c + ip[i] - '0';
    }
    if(c < 0 || c > 255) return false; //c范围不对

    //判断d
    int d = 0;
    l = dot[2] + 1, r = mao[0];
    if(r - l <= 0 || r - l > 3) return false; //d长度不对
    if(ip[l] == '0' && r - l > 1) return false; //d有前导0
    for(int i = l; i < r; i++) 
    {
        if(ip[i] < '0' || ip[i] > '9') return false; //d有非数字字符
        d = 10 * d + ip[i] - '0';
    }
    if(d < 0 || d > 255) return false; //b范围不对

    //判断e
    int e = 0;
    l = mao[0] + 1, r = ip.size();
    if(r - l <= 0 || r - l > 5) return false; //e长度不对
    if(ip[l] == '0' && r - l > 1) return false; //e有前导0
    for(int i = l; i < r; i++) 
    {
        if(ip[i] < '0' || ip[i] > '9') return false; //e有非数字字符
        e = 10 * e + ip[i] - '0';
    }
    if(e < 0 || e > 65535) return false; //e范围不对
    
    return true;
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> type >> ip;
        if(!check(ip)) cout << "ERR" << endl;
        else
        {
            if(type == "Server")
            {
                if(h[ip]) cout << "FAIL" << endl;
                else
                {
                    h[ip] = i;
                    cout << "OK" << endl;
                } 
            }
            else if(type == "Client") 
            {
                if(h[ip]) cout << h[ip] << endl;
                else cout << "FAIL" << endl;
            }
        }
    }
    return 0;
}

 

标签:false,int,ip,P7911,++,2021,return,CSP,dot
From: https://www.cnblogs.com/jcwy/p/18254773

相关文章

  • Lightroom Classic for mac/win (Lrc2021) 10.3中文直装版
    LightroomClassic是Adobe公司开发的一款专业的照片处理和管理软件,旨在帮助摄影师对其作品进行全方位的后期处理,包括调整画面的明暗、色彩、对比度等,以及进行修图、拼接和摄影作品的管理整理等功能。它是摄影师和摄影爱好者常用的后期处理软件之一,可以在室内外的各种场景中进行......
  • NOI2021 Day1
    轻重边把询问和修改都转到点上考虑。相当于给某些路径上的点都染上一种未出现过的颜色,然后查询某些路径上颜色相同的相邻点对数。注意初始时所有点的颜色应该互不相同树剖+线段树就做完了。需要特别注意的是树剖跳链时也会产生贡献。时间复杂度\(\mathcalO(n\log^2n)\)......
  • CSP历年复赛题-P7909 [CSP-J 2021] 分糖果
    原题链接:https://www.luogu.com.cn/problem/P7909题意解读:计算L~R之间数模n的最大值。解题思路:如果你考虑枚举L~R,每个数模n,然后求max,那么就超时了,肯定有一点小技巧在里面。我们知道,一个数%n,最大值是n-1不难考虑,如果R/n和L/n的的商是一样的,而R>=L,那么说明R%n>=L%n,那么此时最大......
  • 2021数据库期末一
    目录第1关:数据表结构修改1任务描述答案:第2关:数据记录删除任务描述答案: 第3关:数据表结构修改2任务描述答案:第4关:数据记录修改任务描述答案:第5关:数据查询一任务描述答案:第6关:数据查询二任务描述答案:第7关:数据查询三任务描述答案:第8关:数据查询四任务描述......
  • [NeurIPS2021]Open-set Label Noise Can Improve Robustness Against Inherent Label
    这篇文章与ICML2022的Open-sampling是同一个作者,方法一模一样,只是问题的场景变为噪声标签学习,Open-sampling是长尾问题的场景,可参见写的这篇blog。这两篇文章大致做法完全相同:对biased数据集引入开集数据,在每个epoch分配均匀的闭集标签。如果是longtaileddata,还涉及不平衡问题,......
  • CSP历年复赛题-P7072 [CSP-J2020] 直播获奖
    原题链接:https://www.luogu.com.cn/problem/P7072题意解读:每增加一个人的分数,计算一次当前获奖的人数,输出当前的分数线。解题思路:最多人数为N=100000,分数最高为M=6001、O(N*N*logN)做法每增加一个人,对已出现的分数进行排序N*logN,计算获奖人数k,取排名第k的人的分数,大概可......
  • CSP_J_真题之 2023 第一轮笔试(一)
    公众号:编程驿站......
  • CSP历年复赛题-P7071 [CSP-J2020] 优秀的拆分
    原题链接:https://www.luogu.com.cn/problem/P7071题意解读:提取n的二进制位所有的1表示的整数,如果最低位是1则输出-1。解题思路:如果n的二进制最低为是1(n是奇数),则肯定不是优秀拆分,输出-1否则,从低位到高位遍历n的每一个二进制位,看第i位是1,倒序输出2^i。100分代码:#include<bits......
  • CSP历年复赛题-P5663 [CSP-J2019] 加工零件
    原题链接:https://www.luogu.com.cn/problem/P5663题意解读:工人是图中的点,传送带是图中的无向边,给出q个询问a,l,判断是否能有一条1号点到a点的路径为l。解题思路:考试的关键是拿分!同样可以来面向数据编程:1、测试点 1∼4,1≤......
  • [SWPUCTF 2021 新生赛]简简单单的逻辑
    查看源代码,大概意思就是已知result反推flagflag='xxxxxxxxxxxxxxxxxx'list=[47,138,127,57,117,188,51,143,17,84,42,135,76,105,28,169,25]result=''foriinrange(len(list)):key=(list[i]>>4)+((list[i]&0xf)<<......