65pts
查看原帖
65pts
1050431
DevilsFlame楼主2024/9/30 22:20
#include<bits/stdc++.h>
#define F 65535
#define P 255
using namespace std;
map <string,int> ser;
string s,f;
int x,n,p,v,cnt,ll;
bool flag;
int main()
{
	cin >> n;
	while(n --)
	{
	    cnt ++;
		cin >> f >> s;
		ll = s.size();
		x = 0;
//		flag = 1;
		v = 0,p = 0;
		bool tt = 0;
		for(int i = 0;i < ll;i ++)
		{
			if(s[i] == '.' || s[i] == ':')
			{
				tt = 0;
				v = i;
				break;
			}
			if(x == 0 && s[i] == '0' && !tt)
				tt = 1;
			x = x * 10 + s[i] - 48;
			if(tt && x != 0)
			{
				tt = 0;
				flag = 0;
				break;
			}
		}
		for(int i = v;i < ll;i ++)
		{
			if(s[i] == '.')
			{
				tt = 0;
				p ++;
				if(x > P)
				{
					flag = 0;
					break;
				}
				x = 0;
			}
			if(s[i] == ':')
			{
				tt = 0;
				flag = 1;
				if(x > 255) flag = 0;
				x = 0,v = i + 1;
				break;
			}
			if(p > 3)
			{
				flag = 0;
				break;
			}
			if(s[i] != '.')
			{
				if(x == 0 && s[i] == '0' && !tt)
					tt = 1;
				x = x * 10 + s[i] - 48;
				if(tt && x != 0)
				{
					tt = 0;
					flag = 0;
					break;
				}
			}
		}
		if(v == ll) flag = 0;
		for(int i = v;i < ll;i ++)
		{
			if(s[i] == '.' || s[i] == ':')
			{
				flag = 0;
				break;
			}
			if(x == 0 && s[i] == '0' && !tt)
				tt = 1;
			x = x * 10 + s[i] - 48;
			if(tt && x != 0)
			{
				tt = 0;
				flag = 0;
				break;
			}
		}
		if(x > F) flag = 0;
		if(!flag)
		{
			puts("ERR");
			continue;
		}
		if(f == "Server")
		{
			if(ser[s]) puts("FAIL");
			else
			{
				ser[s] = cnt;
				puts("OK");
			}
		}
		else
		{
			if(ser[s]) cout << ser[s] << endl;
			else puts("FAIL");
		}
	}
	return 0;
}
2024/9/30 22:20
加载中...