两个问题
查看原帖
两个问题
393864
Elgo87楼主2021/10/24 14:26
  1. 昨天交了一发这题的题解,然后今天题解通道关了。。。

  2. 洛谷 AC,€€£ 那儿能 AC 吗,有什么细节没注意到的吗

#include<bits/stdc++.h>
using namespace std;


const int ser=1,cli=2;
struct address{
	int idx;
	int type;
	string s;
};

bool check(string s)
{
	if(s[0]!='0') return true;
	if(s.size()==1) return true;
	return false;
}

bool is_ok(address add)
{
	
	int sum=0,sum2=0;
	if(!isdigit(add.s[add.s.size()-1]))
		return false;
	for(int i=0; add.s[i]; i++)
	{
		if(add.s[i]=='.')
		{
			if(i==0) return false;
			if(add.s[i-1]<'0' || add.s[i-1]>'9')
				return false;
			sum++;
		}
				
		if(add.s[i]==':')	
		{
			if(sum!=3) return false;
			if(add.s[i-1]<'0' || add.s[i-1]>'9')
				return false;
			sum2++;
		}
			
		
	}
	if(sum!=3 || sum2!=1)  return false;
	
	
	
	int i=0; int sa,sb,sc,sd,se;
	sa=sb=sc=sd=se=0;
	string a,b,c,d,e;
	for(i; add.s[i]!='.'; i++)
		a+=add.s[i]; i++;
	for(i; add.s[i]!='.'; i++)
		b+=add.s[i]; i++;
	for(i; add.s[i]!='.'; i++)
		c+=add.s[i]; i++;
	for(i; add.s[i]!=':'; i++)
		d+=add.s[i]; i++;
	for(i; add.s[i]; i++)
		e+=add.s[i];	
	
	
	for(i=0; a[i]; i++)
		sa=sa*10+a[i]-'0';
	for(i=0; b[i]; i++)
		sb=sb*10+b[i]-'0';
	for(i=0; c[i]; i++)
		sc=sc*10+c[i]-'0';
	for(i=0; d[i]; i++)
		sd=sd*10+d[i]-'0';
	for(i=0; e[i]; i++)
		se=se*10+e[i]-'0';	

	if(check(a)&&check(b)&&check(c)&&check(d)&&check(e)&&sa>=0&&sa<=255&&sb>=0&&sb<=255&&sc>=0&&sc<=255&&sd>=0&&sd<=255&&se>=0&&se<=65535)
		return true;
	return false;
}

address arr[1005];
int n;

int main()
{
// 	freopen("network.in","r",stdin);
// 	freopen("network.out","w",stdout);
	

	cin>>n;
	for(int i=0; i<n; i++)
	{
		string sss1,sss2;
		cin>>sss1>>sss2;
		if(sss1=="Server") arr[i].type=ser;
		else arr[i].type=cli;
		arr[i].s = sss2;
	}
	
	for(int i=0; i<n; i++)
	{
		if(arr[i].type==ser)
		{
			if(!is_ok(arr[i]))
			{
				cout<<"ERR\n";
				goto END;
			}
			for(int j=0; j<i; j++)
			{
				if(arr[i].s == arr[j].s && arr[i].type == arr[j].type)
				{
					cout<<"FAIL\n";
					goto END;
				}
			}
			cout<<"OK\n";
			goto END;
		}
		else
		{
			if(!is_ok(arr[i]))
			{
				cout<<"ERR\n";
				goto END;
			}
			for(int j=0; j<i; j++)
			{
				if(arr[i].s == arr[j].s && arr[i].type != arr[j].type)
				{
					cout<<j+1<<'\n';
					goto END;
				}
			}
			cout<<"FAIL\n";
			goto END;
		}
		END:
			continue;
	}
	
	return 0;
}

/*
5
Server 192.168.1.1:8080
Server 192.168.1.1:8080
Client 192.168.1.1:8080
Client 192.168.1.1:80
Client 192.168.1.1:99999
*/

``
2021/10/24 14:26
加载中...