社区讨论

65pts玄关求调必关,码风良好,有注释

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mhj1lqlc
此快照首次捕获于
2025/11/03 19:14
4 个月前
此快照最后确认于
2025/11/03 19:14
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
string ip[N]; //存地址 
bool j(string s){//判断是否规范 
	int cnt=0,size=0,cnt2=0;
	bool flag=0;//是否有前导0 
	for(int i=7;i<s.length();i++){
		if((s[i]!='.')&&(s[i]!=':')){
			if(!flag&&s[i]==0){//有前导0 
//				cout<<i<<endl;
				return 0;
			}else{
				flag=1;
			}
			cnt++;
			size=size*10+s[i]-'0';
			if(size>255||cnt>3){//是否超出限制 
//				cout<<i<<endl;
				return 0;
			}
		}else if(s[i]=='.'){
			cnt2++;
			cnt=0;
			size=0;
			flag=0;
		}else if(s[i]==':'){
			if(cnt2!=3) return 0;
			size=0;
			if(s[i+1]=='0'){
//				cout<<i<<endl;
				return 0;
			}
			int size2=0;
			if(s.length()-i>6) {
//				cout<<i<<endl;
				return 0;
			}
			for(int j=i+1;j<s.length();j++){
				if(s[j]==':') return 0;
				size=size*10+s[j]-'0';
				if(size>65535) return 0;
			}
			return 1;
		}
	}
}
int main(){
	int n;
	cin>>n;
	for(int i=0;i<=n;i++){
		string s;
		getline(cin,s);
		bool ok=j(s);
		if(ok==0) {
			if(i==0) continue;
			cout<<"ERR"<<endl;
			continue;
		}
		bool is=s[0]=='S'?1:0;
		string ipp="";
		for(int j=7;j<s.length();j++){
			ipp+=s[j];
		}
		if(is){
			bool success=1;
			for(int j=1;j<=n;j++){
				if(ip[j]==ipp){
					cout<<"FAIL"<<endl;
					success=0;
					break;
				}
			}
			if(success){//新地址 
				ip[i]=ipp;
				cout<<"OK"<<endl;
			}
		} else{
			bool success=0;
			for(int j=1;j<=n;j++){
				if(ip[j]==ipp){
					cout<<j<<endl;
					success=1;
					break;
				}
			}
			if(!success){
				cout<<"FAIL"<<endl;
			}
		} 
	}
	return 0;
}

回复

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

正在加载回复...