75pts求助,WA#12,13,18,19,20
查看原帖
75pts求助,WA#12,13,18,19,20
244423
zqw_zqw楼主2021/10/26 20:47
#include <bits/stdc++.h>
using namespace std;

const int pw[]={1,10,100,1000,10000,0};

map<string,bool> vis;
map<string,int> num;

int n;

string op,ad;

bool check(string a)
{
	int l=a.size(),cnt1=0,cnt2=0;
	for(int i=0;i<l-1;i++)
	{
		if((a[i]<'0'||a[i]>'9')&&a[i]!='.'&&a[i]!=':') return true;
		if(a[i]=='0'&&(i==0||a[i-1]=='.'||a[i-1]==':')&&a[i+1]!='.'&&a[i+1]!=':') return true;
		if(a[i]=='.') cnt1++;
		if((a[i]=='.'&&a[i+1]=='.')||(cnt1<3&&a[i]==':')) return true;
		if(a[i]==':') cnt2++;
		if(cnt1>3||cnt2>1) return true;
		if(i==l-2&&(a[i+1]=='.'||a[i+1]==':')) return true;
	}
	int x=0;
	cnt1=0;
	for(int i=l-1;i>=0;i--)
	{
		if(a[i]==':')
		{
			if(x>65535)
				return true;
			x=0;
			cnt1=0;
			continue;
		}
		if(a[i]=='.')
		{
			if(x>255)
				return true;
			x=0;
			cnt1=0;
			continue;
		}
		x=x+(a[i]-'0')*pw[cnt1++];
	}
	if(x>255) return true;
	return false;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		cin>>op>>ad;
		if(check(ad))
		{
			printf("ERR\n");
			continue;
		}
		if(op=="Server")
		{
			if(!vis[ad])
			{
				printf("OK\n");
				vis[ad]=true;
				num[ad]=i;
				continue;
			}
			else
			{
				printf("FAIL\n");
				continue;
			}
		}
		else
		{
			if(!vis[ad])
			{
				printf("FAIL\n");
				continue;
			}
			else
			{
				printf("%d\n",num[ad]);
				continue;
			}
		}
	}
	return 0;
}
2021/10/26 20:47
加载中...