社区讨论

25分大关 求调!! 大佬请出山

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

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@m07kanjo
此快照首次捕获于
2024/08/24 11:09
去年
此快照最后确认于
2025/11/04 22:35
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll n;

string op,s;

ll p,vis;

bool check(string s){
	ll ans1 = 0,ans2 = 0;
	ll flag = 0,t;
	for(ll i = 0;i < s.size();i++){ 
		if(s[0] == '.' || s[0] == ':') return false;
		if(s[s.size() - 1] == '.' || s[s.size() - 1] == ':') return false;
		if(s[i] >= '0' && s[i] <= '9' && vis == 0){//判断数字是否合法  
			t = 0;
			ll j = i;
			while(j < s.size() && s[j] >= '0' && s[j] <= '9'){
				t = t * 10 + s[j] - '0';
				j ++;
			}
			p ++;
//			cout << t << " " << p << " " << j << endl;
			vis = 1;
			if(p <= 4){
				if(t > 255 || t < 0) return false;
			}
			else if(p == 5){
				if(t > 65535 || t < 0) return false;
			}
		}
		if(s[i] == '.') ans1 ++,vis = 0;
		else if(s[i] == ':') ans2 ++,vis = 0;
		if(ans2 == 1 && ans1 != 3) return false;//如果:已经出现 而.不够 return false 
		if(ans1 == 3 && ans2 != 1) return false;
		if(s[i] == '0'){//前导0 
			if((s[i - 1] == '.' || s[i - 1] == ':') && (s[i + 1] == '.' || s[i + 1] == ':')) flag = 1;
			if(s[i - 1] > '0' && s[i - 1] <= '9') flag = 1;
			if(!flag) return false;
		}
		else if((s[i] == '.' || s[i] == ':')){
			if(s[i + 1] == '.' || s[i + 1] == ':') return false;
		}
		else if(s[i] != '.' && s[i] != ':' && (s[i] < '0' || s[i] > '9')) return false; 
	}
	if(ans1 != 3 || ans2 != 1) return false;
	if(p != 5) return false; 
	return true;
}

map<string,ll> mp;

int main(){
//	cout << check("192.168.1.1:8080");
	cin >> n;
	for(ll i = 1;i <= n;i++){
		cin >> op >> s;
		p = 0;
		vis = 0;
		if(!check(s)){
			cout << "ERR" << endl;
			continue;
		}
		if(op == "Server"){
			if(mp.find(s) != mp.end()){//找到 不可以建立 
				cout << "FAIL" << endl;
				continue;
			}
			else{ // 没找到 可以建立 
				mp[s] = i;
				cout << "OK" << endl;
				continue;
			}
		}
		else if(op == "Client"){
			if(mp.find(s) != mp.end()){//找到 可以连接  
				cout << mp[s] << endl;
				continue;
			}
			else{ //没找到 不可以连接 
				cout << "FAIL" << endl;
				continue;
			}
		}
	}		
//	cout << p << endl;
	return 0;
}

回复

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

正在加载回复...