【第24题】我最讨厌的一道题:[CSP-J 2021] 网络连接

2023-08-31 14:22:48 浏览数 (2)

【第24题】[CSP-J 2021] 网络连接

碎碎念

  • 这是一道字符串读取被卡的死死的题;
  • 这是一道搞到接近深夜12点才AC的题;
  • 这是一道看了题解代码,接近照抄才搞定的题;(之前都是看懂题解,自己写代码)
  • 这是一道欠了很多债的题,至今尚未还清;
  • 这是一道让我被老码农训的题;(因为一直在自己捣鼓,浪费了大把时间,老码农很不满意)
  • 这是一道第二天让我特别困的题。

技术债:列举3点

  • 字符串读取
  • scanf和cin读取字符串的区别
  • 调式技巧

题目:[CSP-J 2021] 网络连接

题目原文请移步下面的链接

  • https://www.luogu.com.cn/problem/P7911
    • 参考题解:https://www.luogu.com.cn/problem/solution/P7911
  • 标签:模拟枚举
  • 难度:普及/提高-

题解

思路
  • 思路不难,主要是挂在读数据。
  • 题解大家可移步看这里,很多童鞋写了各种解法
    • https://www.luogu.com.cn/problem/solution/P7911
代码
代码语言:javascript复制

        cin >> tp >> addr;
        //scanf("%s%s", &tp, &addr);
  • AC代码
代码语言:javascript复制
#include <bits/stdc  .h>

using namespace std;

bool check(string s) {
    long long a, b, c, d, e;
    if (sscanf(s.c_str(), "%lld.%lld.%lld.%lld:%lld", &a, &b, &c, &d, &e) != 5) {
        return false;
    }
    if (a < 0 || a > 255 || b < 0 || b > 255 || c < 0 || c > 255 || d < 0 || d > 255 || e < 0 || e > 65535) {
        return false;
    }
    stringstream t;
    t << a << '.' << b << '.' << c << '.' << d << ':' << e;
    return t.str() == s;
}

void coder() {

}

void best() {
    unordered_map<string, int> m;
    string tp, addr;
    int n;
    cin >> n;
    for (int i = 1; i <= n;   i) {
        cin >> tp >> addr;
        //scanf("%s%s", &tp, &addr);
        if (!check(addr)) {
            cout << "ERR" << endl;
            continue;
        }
        if (tp == "Server") {
            if (m[addr]) {
                cout << "FAIL" << endl;
            } else {
                m[addr] = i;
                cout << "OK" << endl;
            }
        } else {
            if (!m.count(addr)) {
                cout << "FAIL" << endl;
            } else {
                cout << m[addr] << endl;
            }
        }
    }
}

int main() {
//	freopen("network.in", "r", stdin);
//	freopen("network.out", "w", stdout);
    best();

//    fclose(stdin);
//    fclose(stdout);
    return 0;
}

END

0 人点赞