求调,想解决前导零只剩下五分,样例能过
查看原帖
求调,想解决前导零只剩下五分,样例能过
773357
ZeroDifference楼主2024/10/20 17:42

不知道怎么解决前导零,加了自己瞎想的解决方案,就只有五分了,否则65分

#include<iostream>
#include<unordered_map>
using namespace std;
unordered_map<string,int> address;
const string ans="1.1.1.1:1";
bool IsNumber(char ch)
{
	return (ch>='0'&&ch<='9');
}
//1 Server 192.168.0.255:80
bool check1(string adr)
{
	int l=adr.length();
	long long sum=0;
	for(int i=0;i<l;i++)
	{
		if(adr[i]=='-')	return false;
		if(IsNumber(adr[i]))
		{
			long long num=adr[i]-'0';			
//			cout<< endl <<"testnum:" << adr[i]-'0'<<endl;
			sum=sum*10+num;
//			cout << endl << "test:" << sum << endl;
		}
		
		if(i==l-1)
		{
//			cout << endl << "test:" << sum << endl;
			if(sum>65535)
				return false;
		}
		else
		{
			if(!IsNumber(adr[i+1]))
			{
//				cout << endl << "test:" << sum << endl;
				if(sum>255)
					return false;
				sum=0;
			}
		}
	}
//	cout << "[]";
	return true;
}
bool check2(string adr)
{
	//	cout << "test:" << adr << endl;
	//a.b.c.d:e
	int l=adr.length();
	string res="";
	for(int i=0;i<l;i++)
	{
 		if(i==0&&adr[i]=='0')
			return false;
		if(i>=1)
			if((adr[i]=='0')&&(adr[i-1]=='.'||adr[i-1]==':'))
				return false;             
		if(!IsNumber(adr[i]))
			res+=adr[i];
		else
		{
			if(i==l-1)
				res+="1";
			else
			{
				if(!IsNumber(adr[i+1]))
					res+="1";
			}
		}	
	}
//	cout <<endl <<  "test:"<< res<<endl;
	return (res==ans);
}
bool check(string adr)
{
	return check1(adr)&&check2(adr);
}
int main()
{
	int t;
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
	{
		string typ,adr;
		cin >> typ;
		cin >> adr;
		if(!check(adr))
		{
			printf("ERR\n");
			continue;
		}
		if(typ=="Server")
		{
			if(address.count(adr)==1)
			{
				printf("FAIL\n");
				continue;
			}
			address[adr]=i;
			printf("OK\n");
		}
		else
		{
			if(address.count(adr)==1)
				printf("%d\n",address[adr]);
			else
				printf("FAIL\n");
		}
	}
	return 0;
}
2024/10/20 17:42
加载中...