社区讨论

65分求调(必关)

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mhj0lx4j
此快照首次捕获于
2025/11/03 18:46
4 个月前
此快照最后确认于
2025/11/03 18:46
4 个月前
查看原帖
大概就是check函数稍微有点复杂,但还好,都是按照题目模拟的
CPP
#include<bits/stdc++.h>
using namespace std;
int n;string po,a[1010],x; 
bool check(string s){
	//符号 
	int a1[50],f=0,i;
	for(i=0;i<s.size();i++){
		if(s[i]=='.'){
			a1[++f]=i;
		}
		if(f==3)break;
	}
	if(f!=3)return 0;
	for(i=i+1;i<s.size();i++){
		if(s[i]=='.')return 0;
		if(s[i]==':'){
			a1[++f]=i;
			break;
		}
	}
	if(f!=4)return 0;
	for(i=i+1;i<s.size();i++){
		if(s[i]==':')return 0;
	}
	
	//数字 
	int A=0,B=0,C=0,D=0,E=0,cnt;
	cnt=1;
	if(a1[1]>=4)return 0;
	if(a1[2]-a1[1]-1>=4)return 0;
	if(a1[3]-a1[2]-1>=4)return 0;
	if(a1[4]-a1[3]-1>=4)return 0;
	if(s.size()-a1[4]-1>=6)return 0;
	for(int j=a1[1]-1;j>=0;j--){
		if(!(s[j]<='9'&&s[j]>='0'))return 0;
		A+=(s[j]-'0')*cnt;
		cnt*=10;
	}
	cnt=1;
	for(int j=a1[2]-1;j>a1[1];j--){
		if(!(s[j]<='9'&&s[j]>='0'))return 0;
		B+=(s[j]-'0')*cnt;
		cnt*=10;
	}
	cnt=1;
	for(int j=a1[3]-1;j>a1[2];j--){
		if(!(s[j]<='9'&&s[j]>='0'))return 0;
		C+=(s[j]-'0')*cnt;
		cnt*=10;
	}
	cnt=1;
	for(int j=a1[4]-1;j>a1[3];j--){
		if(!(s[j]<='9'&&s[j]>='0'))return 0;
		D+=(s[j]-'0')*cnt;
		cnt*=10;
	}
	cnt=1;
	for(int j=s.size()-1;j>a1[4];j--){
		if(!(s[j]<='9'&&s[j]>='0'))return 0;
		E+=(s[j]-'0')*cnt;
		cnt*=10;
	}
//	cout<<A<<' '<<B<<' '<<C<<' '<<D<<' '<<E<<'\n';
//前导0 
	if(A!=0&&(s[0]-'0')==0)return 0;
	if(B!=0&&(s[a1[1]+1]-'0')==0)return 0;
	if(C!=0&&(s[a1[2]+1]-'0')==0)return 0;
	if(D!=0&&(s[a1[3]+1]-'0')==0)return 0;
	if(E!=0&&(s[a1[4]+1]-'0')==0)return 0;
//范围 
	
	if(!(A>=0&&A<=255))return 0;
	if(!(B>=0&&B<=255))return 0;
	if(!(C>=0&&C<=255))return 0;
	if(!(D>=0&&D<=255))return 0;
	if(!(E>=0&&E<=65535))return 0;
	return 1;
}
int main(){
	ios::sync_with_stdio(NULL);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>po;
		if(po=="Server"){
			cin>>a[i];
			if(!check(a[i])){
				cout<<"ERR"<<'\n';
				a[i]="e";
			}
			else{
				int fs=0;
				for(int j=1;j<i;j++){
					if(a[j]=="e")continue;
					if(a[j]==a[i]){
						cout<<"FAIL"<<'\n';
						a[i]="e";
						fs=1;
						break;
					}
				}
				if(fs==0){
					cout<<"OK"<<'\n';
				}
			}
		}
		else{
			cin>>x;
			if(!check(x)){
				cout<<"ERR"<<'\n';
			}
			else{
				int fs=0;
				for(int j=1;j<i;j++){
					if(a[j]=="e")continue;
					if(a[j]==x){
						cout<<j<<'\n';
						fs=1;
						break;
					}
				}
				if(fs==0){
					cout<<"FAIL"<<'\n';
				}
			}
		}
	}
	return 0;
}
/*
1
Server 01.2.3.4:80
*/

回复

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

正在加载回复...