社区讨论

75分求助,WA on T13,14,19,20,21(悬赏关注)

P7911[CSP-J 2021] 网络连接参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo7wssne
此快照首次捕获于
2023/10/27 09:02
2 年前
此快照最后确认于
2023/10/27 09:02
2 年前
查看原帖
RT,已经调了1h了……,代码如下:
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>

#define MAX 10

using namespace std;

map<string,int> g;

string op,ad;
int tmp,n;

inline bool check()
{
	string x=ad;
	int l=x.length();
	int a[MAX]={0},first[MAX]={0},flag=0,k=0;
	int sum=0,sum1=0,sum2=0;
	while(k<=l)
	{
		if(x[k]=='.'||x[k]==':'||x[k]=='\n'||x[k]=='\0') 
		{
			if(x[k]=='.') 
			{
				sum1++;
				if(sum2!=0) return false;
			}
			if(x[k]==':') 
			{
				sum2++;
				if(sum1!=3) return false;
			}
			a[++flag]=sum,sum=0;
		}
		else 
		{
			if(!sum&&x[k]=='0'&&x[k+1]!='.'&&x[k+1]!=':'&&k+1<l) return false;
			sum=sum*10+x[k]-'0';
		}
		++k;
	}
	if(sum1!=3||sum2!=1||flag!=5) return false;
	for(register int i=1; i<=4; i++)
		if(a[i]<0||a[i]>255) return false;
	if(a[5]<0||a[5]>65535) return false;
	return true;
}

int main()
{
	scanf("%d",&n);
	for(register int i=1; i<=n; i++)
	{
		cin>>op>>ad;
		tmp++;
		if(!check()) 
		{
			printf("ERR\n");
			continue;
		}
		if(op[0]=='S')
		{
			if(!g[ad]) 
			{
				g[ad]=tmp;
				printf("OK\n");
			}
			else printf("FAIL\n");
		}
		if(op[0]=='C')
		{
			if(g[ad]) printf("%d\n",g[ad]);
			else printf("FAIL\n");
		}
	}
	
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...