CSP-J大水题求调(65pts)(大力玄关)
查看原帖
CSP-J大水题求调(65pts)(大力玄关)
777131
IDNo1楼主2023/10/8 21:44

红紫,红紫,碎了一摊心血。

#include<bits/stdc++.h>
#define re register int
#define rll register long long
using namespace std;
int n;
map<string,int> mp;
string s1,s2;
bool pd(string s)
{
	rll x=s.size();
	re sum=0,pos=0,point=0,dvc=0,arr[6]={-1,0,0,0,0,(int)x};
	for(re i=0;i<s.size();i++)
	{
		if(s[i]=='.')
		{
			point++;
			arr[++pos]=i;
		}
		else if(s[i]==':')
		{
			dvc++;
			arr[++pos]=i;
		}
	}
//	cout<<"\narr:\n";for(re i=1;i<=5;i++)
//	{
//		if(arr[i]<arr[i-1])
//		{
//			return false;
//		}
//		cout<<arr[i]<<" ";
//	}cout<<dvc<<endl;
	if(point==3&&dvc==1)
	{
		cout<<"int";
		for(re i=1;i<=4;i++)
		{
			x=0;
			if(s[arr[i-1]+1]=='0'&&arr[i]-arr[i-1]!=2)
			{
				return false;
			}
			for(re j=arr[i-1]+1;j<arr[i];j++)
			{
				if(s[j]<'0'||s[j]>'9')
				{
					return false;
				}
				x=x*10+s[j]-'0';
			}
			if(x<0||x>255)
			{
				return false;
			}
			//cout<<x<<" ";
		}
		x=0;
		if(s[arr[4]+1]=='0'&&arr[5]-arr[4]!=2)
		{
				return false;
		}
		for(re i=arr[4]+1;i<arr[5];i++)
		{
			if(s[i]<'0'||s[i]>'9')
			{
				return false;
			}
			x=x*10+s[i]-'0';
		}
		if(x<0||x>65535)
		{
			return false;
		}
		return true;
	}
	else
	{
		//cout<<111;
		return false;
	}//1 Client 910.135.39.1933141680
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n;
	for(re i=1;i<=n;i++)
	{
		cin>>s1>>s2;
		cout<<i<<":"<<s1<<"    "<<s2<<endl;
		if(s1=="Client")
		{
			if(!pd(s2))
			{
				cout<<"ERR\n";
			}
			else if(mp[s2]>=1&&mp[s2]<=n)
			{
				cout<<mp[s2]<<"\n";
			}
			else
			{
				cout<<"FAIL\n";
			}
		}
		else if(s1=="Server")
		{
			if(pd(s2))
			{
				if(mp[s2]>=1&&mp[s2]<=n)
				{
					cout<<"FAIL\n";
				}
				else
				{
					mp[s2]=i;
					cout<<"OK\n";	
				}
			}
			else
			{
				cout<<"ERR\n";
			}
		}
	}
	return 0;
}
2023/10/8 21:44
加载中...