75分求问#13#16#17#18#19
查看原帖
75分求问#13#16#17#18#19
97737
Wsyflying2022楼主2021/10/27 00:22
#include <bits/stdc++.h>
using namespace std;
int n;
const int key=1e9+7;
string s;
map<string , int > mp;
int p[4];
bool check()
{
	int len=s.length(),s1=0,s2=0,tot=0;
	long long t1=0,t2=0,t3=0,t4=0,t5=0;
	memset(p,0,sizeof(p));
	if (s[len-1]==':') return false;
	for (int i=0;i<len;i++)
	  if (s[i]=='.') s1++;
	  else if (s[i]==':') 
	  {
	  	  if (s1!=3) return false;
	      s2++;
	  }
	  else if (s[i]=='-') return false;
	if (s1!=3 || s2!=1) return false;
	for (int i=0;i<len;i++)
	  if (s[i]=='.' || s[i]==':') p[tot++]=i;
	for (int i=0;i<3;i++)
	  if (p[i+1]-p[i]==1) return false;
	if (p[0]>3 || p[1]-p[0]-1>3 || p[2]-p[1]-1>3 || p[3]-p[2]-1>3 || len-p[3]-1>5) return false;
	for (int i=0;i<p[0];i++)
	  t1=(long long) (t1*10+s[i]-48);
	for (int i=p[0]+1;i<p[1];i++)
	  t2=(long long) (t2*10+s[i]-48);
	for (int i=p[1]+1;i<p[2];i++)
	  t3=(long long) (t3*10+s[i]-48);
    for (int i=p[2]+1;i<p[3];i++)
      t4=(long long) (t4*10+s[i]-48);
    for (int i=p[3]+1;i<len;i++)
      t5=(long long) (t5*10+s[i]-48);
    if (t1>255 || t2>255 || t3>255 || t4>255 || t5>65535) return false;
    if (t1!=0 && s[0]=='0' && s[1]=='0') return false;
    if (t2!=0 && s[p[0]+1]=='0' && s[p[0]+2]=='0') return false;
    if (t3!=0 && s[p[1]+1]=='0' && s[p[1]+2]=='0') return false;
    if (t4!=0 && s[p[2]+1]=='0' && s[p[2]+2]=='0') return false;
    if (len==p[3]+2) return true;
    if (t5!=0 && s[p[3]+1]=='0' && s[p[3]+2]=='0') return false;
    return true;
}
int main()
{
/*	freopen("network.in","r",stdin);
	freopen("network.out","w",stdout);*/
	ios::sync_with_stdio(false);
	cin>>n;
	for (int i=1;i<=n;i++)
	{
		string op;
		cin>>op>>s;
		if (check())
		{
			if (op=="Server")
			{
				if (mp[s]) cout<<"FAIL"<<endl;
				else 
				{
					cout<<"OK"<<endl;
					mp[s]=i;
				}
			}
			else if (!mp[s]) cout<<"FAIL"<<endl;
			else cout<<mp[s]<<endl;
		}
		else cout<<"ERR"<<endl;
	}
	return 0;
}

2021/10/27 00:22
加载中...