十万火急!!12,13,16,17,18,19,20点RT了。
查看原帖
十万火急!!12,13,16,17,18,19,20点RT了。
364991
xler0915楼主2021/10/30 14:44

RT

我的源代码:

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

map<string, int> ma;
bool check(string s) {
	int len = s.size();
	if (!isdigit(s[0]) && !isdigit(s[len - 1]))
		return false;

	vector<int> v1, v2;
	for (int i = 0; i < len; i++) {
		if (s[i] == '.')
			v1.push_back(i);
		else if (s[i] == ':')
			v2.push_back(i);
	}
	if (v1.size() != 3 && v2.size() != 1)
		return false;
	if ((v1[0] + 1 == v1[1]) || (v1[1] + 1 == v1[2]))
		return false;
	if (!(v2[0] > v1[2] + 1))
		return false;

	for (int i = 0; i < len; i++) {
		if (!isdigit(s[i]))
			s[i] = ' ';
	}
	stringstream ss(s);
	string numstr[5];
	for (int i = 0; i < 5; i++)
		ss >> numstr[i];
	int num[5];
	for (int i = 0; i < 5; i++)
		num[i] = stoi(numstr[i]);
	for (int i = 0; i < 5; i++) {
		if (numstr[i][0] == '0' && numstr[i].size() > 1)
			return false;
		if (i == 4 && num[i] > 65535)
			return false;
		if (i < 4 && num[i] > 255)
			return false;
	}
	return true;
}

void solve(int id) {
	string op, ad;
	cin >> op >> ad;
	if (!check(ad))
		cout << "ERR\n";
	else if (op == "Server") {
		if (ma.count(ad))
			cout << "FAIL\n";
		else {
			cout << "OK\n";
			ma[ad] = id;
		}
	}
	else {
		if (!ma.count(ad))
			cout << "FAIL\n";
		else
			cout << ma[ad] << endl;
	}
}

int main() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		solve(i);
	return 0;
}

蒟蒻感激不尽!

2021/10/30 14:44
加载中...