社区讨论

我考场代码长这样,能得几分?

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

讨论操作

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

当前回复
23 条
当前快照
1 份
快照标识符
@lobie3jz
此快照首次捕获于
2023/10/29 21:30
2 年前
此快照最后确认于
2023/11/04 02:41
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define for1(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
set<pair<string,int> > s;
bool guifan(string s1,string s2)
{
	int k[10],l=0,a1=0,a2=0,a3=0,a4=0,a5=0;
	if(s2[0]=='0'&&s2[1]!='.') return 1;
	for1(i,0,s2.size()-1) if(s2[i]=='.'||s2[i]==':') k[++l]=i;
	if(l!=4||s2[k[1]]!='.'||s2[k[2]]!='.'||s2[k[3]]!='.'||s2[k[4]]!=':') return 1;
	for1(i,1,3) if(s2[k[i]+1]=='0'&&s2[k[i]+2]!='.'&&s2[k[i]+2]!=':') return 1;
	if(s2[k[l]+1]=='0'&&s2.size()!=l+2)return 1;
	for1(i,0,k[1]-1) a1=a1*10+s2[i]-'0';
	for1(i,k[1]+1,k[2]-1) a2=a2*10+s2[i]-'0';
	for1(i,k[2]+1,k[3]-1) a3=a3*10+s2[i]-'0';
	for1(i,k[3]+1,k[4]-1) a4=a4*10+s2[i]-'0';
	for1(i,k[4]+1,s2.size()-1) a5=a5*10+s2[i]-'0';
	if(a1>255||a2>255||a3>255||a4>255||a5>65535)return 1;
	return 0;
}
int main()
{
	freopen("network.in","r",stdin);
	freopen("network.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int n;
	cin>>n;
	for1(j,1,n)
	{
		string s1,s2;
		cin>>s1>>s2;
		if(guifan(s1,s2)){puts("ERR");continue;}
		if(s1=="Server")
		{
			int f=0;
			for(auto it=s.begin();it!=s.end();it++) if(it->first==s2){f=1;break;}
			if(f==0) {s.insert(pair<string,int>(s2,j));puts("OK");}
			else puts("FAIL");
		}
		else
		{
			int f=0;
			for(auto it=s.begin();it!=s.end();it++) if(it->first==s2){f=1;cout<<it->second<<endl;break;}
			if(f==0) puts("FAIL");
		}
	}
	return 0;
}

回复

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

正在加载回复...