【第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
代码
- 坑
cin >> tp >> addr;
//scanf("%s%s", &tp, &addr);
- AC代码
#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