75pts T13,14,19,20,21 RE 但本地不RE
查看原帖
75pts T13,14,19,20,21 RE 但本地不RE
799077
laisweet楼主2022/10/11 22:00

rt

#include<bits/stdc++.h>
using namespace std;
const long long N=1005;
struct comp
{
	string name,address,ans;
	long long n;
};
long long n,total;
comp c[N];
map<string,int>mp;
bool check(string a)
{
	long long leng=a.size(),num[5],top=0,i=0,k;
	memset(num,-1,sizeof(num));
	bool f=true;
	while(i<leng)
	{
		if(i==0||(a[i]=='.'&&top<=3)||(a[i]==':'&&top==4))
		{
			if(i!=0)
			{
				i++;
			}
			if(a[i]=='0'&&a[i+1]>='0'&&a[i+1]<='9')
			{
				f=false;
				break;
			}
			if(a[i-1]==':'&&top==4)
			{
				k=65536;
			}
			else
			{
				k=256;
			}
			num[top]=0;
			while(a[i]>='0'&&a[i]<='9'&&i<leng)
			{
				num[top]*=10;
				num[top]+=(a[i]-'0');
				i++;
			}
			if(num[top]<=-1||num[top]>=k)
			{
				f=false;
				break;
			}
			top++;
		}
		else
		{
			f=false;
			break;
		}
	}
	return f;
}
string re(string a)
{
	string b;
	long long leng=a.size();
	for(long long i=0,j=leng-1;i<leng;i++,j--)
	{
		b+=a[j];
	}
	return b.c_str();
}
string search(string a,long long k)
{
	if(mp.find(a)!=mp.end())
	{
		long long o=mp[a];
		string b;
		while(o)
		{
			b+=(o%10)+'0';
			o/=10;
		}
		return re(b);
	}
	if(c[k].name[0]=='S')
	{
		mp.insert(pair<string,int>(a,k));
		return "OK";
	}
	else
	{
		return "FAIL";
	}
}
string Server(string a,long long k)
{
	string f=search(a,k);
	if(f!="OK")
	{
		return "FAIL";
	}
	else
	{
		return f;
	}
}
string Client(string a,long long k)
{
	return search(a,k);
}
int main()
{
	cin>>n;
	for(long long i=1;i<=n;i++)
	{
		cin>>c[i].name>>c[i].address;
		c[i].n=i;
		if(!check(c[i].address))
		{
			c[i].ans="ERR";
		}
		if(c[i].ans.empty())
		{
			if(c[i].name[0]=='S')
			{
				c[i].ans=Server(c[i].address,i);
			}
			if(c[i].name[0]=='C')
			{
				c[i].ans=Client(c[i].address,i);
			}
		}
	}
	for(long long i=1;i<=n;i++)
	{
		cout<<c[i].ans<<endl;
	}
	return 0;
}
2022/10/11 22:00
加载中...