55pts求调,已注释
查看原帖
55pts求调,已注释
708102
bijhla楼主2023/9/26 19:18
#include <bits/stdc++.h>
#define ll long long
#define PII pair<int, int>
#define MP make_pair
using namespace std;
map <string, int> maps;
int n;
int si (string s)
{
	int tmp = 0;
	for (int i = 0; i < (int) s.size(); i++)
	{
		tmp = tmp * 10 + s[i] - 48;
	}
	return tmp;
}
int check (string s)
{
	int num[6] = {}, tmp1 = 0, tmp2 = 0, a;
	num[0] = -1;
	//不是形如 a.b.c.d:e 格式的字符串
	
	for (int i  = 0; i < (int) s.size(); i++)
	{
        if (s[i] == '.' && s[i + 1] == '.')
        {
            return 0;
        }
		else if (s[i] == '.')
		{
			num[++tmp1] = i;
		}
		else if (s[i] == ':')
		{
			++tmp2;
			a = i;
		}
		else if (s[i] < '0' || s[i] > '9')
		{
			return 0;
		}
        else if (s[i] == ':' && s[i + 1] < '0' || s[i] == '.' && s[i + 1] > '9')
        {
            return 0;
        }
	}
	for (int i = 1; i <= 3; i++)
	{
		if (a < num[i])
		{
			return 0;
		}
	}
	if (tmp1 != 3 || tmp2 != 1)
	{
		return 0;
	}

	//判断前导零和a,b,c,d的范围
	for (int i = 1; i <= 3; i++)
	{
		string t = s.substr(num[i - 1] + 1, num[i] - num[i - 1] - 1);
		bool flag = 1;
		if (si(t) < 0 || si(t) > 255)
		{
			return 0;
		}
		for (int j = 0; j < (int) t.size(); j++)
		{
			if (t[j] == '0' && flag == 1 && j != 0)
			{
				return 0;
			}
			else
			{
				flag = 0;
			}
		}
	}	
	//判断前导零和e的范围
	string b = s.substr(a + 1, s.size() - a);
	bool flag = 1;
	for (int i = 0; i < (int) b.size(); i++)
	{
		if (b[i] == '0' && flag == 1)
		{
			return 0;
		}
		else
		{
			flag = 0;
		}
	}
	if (si (b) < 0 || si(b) > 65535)
	{
		return 0;
	}
	return 1;
}
int main ()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		string op, s;
		cin >> op >> s;
		if (op == "Server")
		{
			if (check (s))
			{
				if (!maps[s])
				{
					cout << "OK" << endl;
					maps[s] = i;
				}
				else
				{
					cout << "FAIL" << endl;
				}
			}
			else
			{
				cout << "ERR" << endl;
			}
		}
		else
		{
			if (check (s))
			{
				if (maps[s] == 0)
				{
					cout << "FAIL" << endl;
				}
				else
				{
					cout << maps[s] << endl;
				}
			}
			else
			{
				cout << "ERR" << endl;
			}
		}
	}
	return 0;
}

2023/9/26 19:18
加载中...